Rebrand from MyCrib to Casera
- Update Go module from mycrib-api to casera-api - Update all import statements across 69 Go files - Update admin panel branding (title, sidebar, login form) - Update email templates (subjects, bodies, signatures) - Update PDF report generation branding - Update Docker container names and network - Update config defaults (database name, email sender, APNS topic) - Update README and documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -9,11 +9,11 @@ import (
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/config"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/requests"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/responses"
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/config"
|
||||
"github.com/treytartt/casera-api/internal/dto/requests"
|
||||
"github.com/treytartt/casera-api/internal/dto/responses"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"github.com/redis/go-redis/v9"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/config"
|
||||
"github.com/treytartt/casera-api/internal/config"
|
||||
)
|
||||
|
||||
// CacheService provides Redis caching functionality
|
||||
|
||||
@@ -5,10 +5,10 @@ import (
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/dto/requests"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/responses"
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/dto/requests"
|
||||
"github.com/treytartt/casera-api/internal/dto/responses"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
// Contractor-related errors
|
||||
|
||||
@@ -5,10 +5,10 @@ import (
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/dto/requests"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/responses"
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/dto/requests"
|
||||
"github.com/treytartt/casera-api/internal/dto/responses"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
// Document-related errors
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/rs/zerolog/log"
|
||||
"gopkg.in/gomail.v2"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/config"
|
||||
"github.com/treytartt/casera-api/internal/config"
|
||||
)
|
||||
|
||||
// EmailService handles sending emails
|
||||
@@ -86,7 +86,7 @@ func (s *EmailService) SendEmailWithAttachment(to, subject, htmlBody, textBody s
|
||||
|
||||
// SendWelcomeEmail sends a welcome email with verification code
|
||||
func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error {
|
||||
subject := "Welcome to MyCrib - Verify Your Email"
|
||||
subject := "Welcome to Casera - Verify Your Email"
|
||||
|
||||
name := firstName
|
||||
if name == "" {
|
||||
@@ -109,16 +109,16 @@ func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error {
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>Welcome to MyCrib!</h1>
|
||||
<h1>Welcome to Casera!</h1>
|
||||
</div>
|
||||
<p>Hi %s,</p>
|
||||
<p>Thank you for creating a MyCrib account. To complete your registration, please verify your email address by entering the following code:</p>
|
||||
<p>Thank you for creating a Casera account. To complete your registration, please verify your email address by entering the following code:</p>
|
||||
<div class="code">%s</div>
|
||||
<p>This code will expire in 24 hours.</p>
|
||||
<p>If you didn't create a MyCrib account, you can safely ignore this email.</p>
|
||||
<p>Best regards,<br>The MyCrib Team</p>
|
||||
<p>If you didn't create a Casera account, you can safely ignore this email.</p>
|
||||
<p>Best regards,<br>The Casera Team</p>
|
||||
<div class="footer">
|
||||
<p>© %d MyCrib. All rights reserved.</p>
|
||||
<p>© %d Casera. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@@ -126,20 +126,20 @@ func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error {
|
||||
`, name, code, time.Now().Year())
|
||||
|
||||
textBody := fmt.Sprintf(`
|
||||
Welcome to MyCrib!
|
||||
Welcome to Casera!
|
||||
|
||||
Hi %s,
|
||||
|
||||
Thank you for creating a MyCrib account. To complete your registration, please verify your email address by entering the following code:
|
||||
Thank you for creating a Casera account. To complete your registration, please verify your email address by entering the following code:
|
||||
|
||||
%s
|
||||
|
||||
This code will expire in 24 hours.
|
||||
|
||||
If you didn't create a MyCrib account, you can safely ignore this email.
|
||||
If you didn't create a Casera account, you can safely ignore this email.
|
||||
|
||||
Best regards,
|
||||
The MyCrib Team
|
||||
The Casera Team
|
||||
`, name, code)
|
||||
|
||||
return s.SendEmail(to, subject, htmlBody, textBody)
|
||||
@@ -147,7 +147,7 @@ The MyCrib Team
|
||||
|
||||
// SendVerificationEmail sends an email verification code
|
||||
func (s *EmailService) SendVerificationEmail(to, firstName, code string) error {
|
||||
subject := "MyCrib - Verify Your Email"
|
||||
subject := "Casera - Verify Your Email"
|
||||
|
||||
name := firstName
|
||||
if name == "" {
|
||||
@@ -174,9 +174,9 @@ func (s *EmailService) SendVerificationEmail(to, firstName, code string) error {
|
||||
<div class="code">%s</div>
|
||||
<p>This code will expire in 24 hours.</p>
|
||||
<p>If you didn't request this, you can safely ignore this email.</p>
|
||||
<p>Best regards,<br>The MyCrib Team</p>
|
||||
<p>Best regards,<br>The Casera Team</p>
|
||||
<div class="footer">
|
||||
<p>© %d MyCrib. All rights reserved.</p>
|
||||
<p>© %d Casera. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@@ -197,7 +197,7 @@ This code will expire in 24 hours.
|
||||
If you didn't request this, you can safely ignore this email.
|
||||
|
||||
Best regards,
|
||||
The MyCrib Team
|
||||
The Casera Team
|
||||
`, name, code)
|
||||
|
||||
return s.SendEmail(to, subject, htmlBody, textBody)
|
||||
@@ -205,7 +205,7 @@ The MyCrib Team
|
||||
|
||||
// SendPasswordResetEmail sends a password reset email
|
||||
func (s *EmailService) SendPasswordResetEmail(to, firstName, code string) error {
|
||||
subject := "MyCrib - Password Reset Request"
|
||||
subject := "Casera - Password Reset Request"
|
||||
|
||||
name := firstName
|
||||
if name == "" {
|
||||
@@ -235,9 +235,9 @@ func (s *EmailService) SendPasswordResetEmail(to, firstName, code string) error
|
||||
<div class="warning">
|
||||
<strong>Security Notice:</strong> If you didn't request a password reset, please ignore this email. Your password will remain unchanged.
|
||||
</div>
|
||||
<p>Best regards,<br>The MyCrib Team</p>
|
||||
<p>Best regards,<br>The Casera Team</p>
|
||||
<div class="footer">
|
||||
<p>© %d MyCrib. All rights reserved.</p>
|
||||
<p>© %d Casera. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@@ -258,7 +258,7 @@ This code will expire in 15 minutes.
|
||||
SECURITY NOTICE: If you didn't request a password reset, please ignore this email. Your password will remain unchanged.
|
||||
|
||||
Best regards,
|
||||
The MyCrib Team
|
||||
The Casera Team
|
||||
`, name, code)
|
||||
|
||||
return s.SendEmail(to, subject, htmlBody, textBody)
|
||||
@@ -266,7 +266,7 @@ The MyCrib Team
|
||||
|
||||
// SendPasswordChangedEmail sends a password changed confirmation email
|
||||
func (s *EmailService) SendPasswordChangedEmail(to, firstName string) error {
|
||||
subject := "MyCrib - Your Password Has Been Changed"
|
||||
subject := "Casera - Your Password Has Been Changed"
|
||||
|
||||
name := firstName
|
||||
if name == "" {
|
||||
@@ -289,13 +289,13 @@ func (s *EmailService) SendPasswordChangedEmail(to, firstName string) error {
|
||||
<div class="container">
|
||||
<h1>Password Changed</h1>
|
||||
<p>Hi %s,</p>
|
||||
<p>Your MyCrib password was successfully changed on %s.</p>
|
||||
<p>Your Casera password was successfully changed on %s.</p>
|
||||
<div class="warning">
|
||||
<strong>Didn't make this change?</strong> If you didn't change your password, please contact us immediately at support@mycrib.com or reset your password.
|
||||
<strong>Didn't make this change?</strong> If you didn't change your password, please contact us immediately at support@casera.app or reset your password.
|
||||
</div>
|
||||
<p>Best regards,<br>The MyCrib Team</p>
|
||||
<p>Best regards,<br>The Casera Team</p>
|
||||
<div class="footer">
|
||||
<p>© %d MyCrib. All rights reserved.</p>
|
||||
<p>© %d Casera. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@@ -307,12 +307,12 @@ Password Changed
|
||||
|
||||
Hi %s,
|
||||
|
||||
Your MyCrib password was successfully changed on %s.
|
||||
Your Casera password was successfully changed on %s.
|
||||
|
||||
DIDN'T MAKE THIS CHANGE? If you didn't change your password, please contact us immediately at support@mycrib.com or reset your password.
|
||||
DIDN'T MAKE THIS CHANGE? If you didn't change your password, please contact us immediately at support@casera.app or reset your password.
|
||||
|
||||
Best regards,
|
||||
The MyCrib Team
|
||||
The Casera Team
|
||||
`, name, time.Now().UTC().Format("January 2, 2006 at 3:04 PM UTC"))
|
||||
|
||||
return s.SendEmail(to, subject, htmlBody, textBody)
|
||||
@@ -320,7 +320,7 @@ The MyCrib Team
|
||||
|
||||
// SendTaskCompletedEmail sends an email notification when a task is completed
|
||||
func (s *EmailService) SendTaskCompletedEmail(to, recipientName, taskTitle, completedByName, residenceName string) error {
|
||||
subject := fmt.Sprintf("MyCrib - Task Completed: %s", taskTitle)
|
||||
subject := fmt.Sprintf("Casera - Task Completed: %s", taskTitle)
|
||||
|
||||
name := recipientName
|
||||
if name == "" {
|
||||
@@ -353,9 +353,9 @@ func (s *EmailService) SendTaskCompletedEmail(to, recipientName, taskTitle, comp
|
||||
<p class="task-title">%s</p>
|
||||
<p class="task-meta">Completed by: %s<br>Completed on: %s</p>
|
||||
</div>
|
||||
<p>Best regards,<br>The MyCrib Team</p>
|
||||
<p>Best regards,<br>The Casera Team</p>
|
||||
<div class="footer">
|
||||
<p>© %d MyCrib. All rights reserved.</p>
|
||||
<p>© %d Casera. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@@ -374,7 +374,7 @@ Completed by: %s
|
||||
Completed on: %s
|
||||
|
||||
Best regards,
|
||||
The MyCrib Team
|
||||
The Casera Team
|
||||
`, name, residenceName, taskTitle, completedByName, time.Now().UTC().Format("January 2, 2006 at 3:04 PM"))
|
||||
|
||||
return s.SendEmail(to, subject, htmlBody, textBody)
|
||||
@@ -382,7 +382,7 @@ The MyCrib Team
|
||||
|
||||
// SendTasksReportEmail sends a tasks report email with PDF attachment
|
||||
func (s *EmailService) SendTasksReportEmail(to, recipientName, residenceName string, totalTasks, completed, pending, overdue int, pdfData []byte) error {
|
||||
subject := fmt.Sprintf("MyCrib - Tasks Report for %s", residenceName)
|
||||
subject := fmt.Sprintf("Casera - Tasks Report for %s", residenceName)
|
||||
|
||||
name := recipientName
|
||||
if name == "" {
|
||||
@@ -441,9 +441,9 @@ func (s *EmailService) SendTasksReportEmail(to, recipientName, residenceName str
|
||||
</table>
|
||||
</div>
|
||||
<p>Open the attached PDF for the complete list of tasks with details.</p>
|
||||
<p>Best regards,<br>The MyCrib Team</p>
|
||||
<p>Best regards,<br>The Casera Team</p>
|
||||
<div class="footer">
|
||||
<p>© %d MyCrib. All rights reserved.</p>
|
||||
<p>© %d Casera. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@@ -466,7 +466,7 @@ Summary:
|
||||
Open the attached PDF for the complete list of tasks with details.
|
||||
|
||||
Best regards,
|
||||
The MyCrib Team
|
||||
The Casera Team
|
||||
`, residenceName, name, residenceName, totalTasks, completed, pending, overdue)
|
||||
|
||||
// Create filename with timestamp
|
||||
|
||||
@@ -7,9 +7,9 @@ import (
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/push"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/push"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
// Notification-related errors
|
||||
|
||||
@@ -164,7 +164,7 @@ func (s *PDFService) GenerateTasksReportPDF(report *TasksReportResponse) ([]byte
|
||||
pdf.SetY(-25)
|
||||
pdf.SetFont("Arial", "I", 9)
|
||||
pdf.SetTextColor(128, 128, 128)
|
||||
pdf.Cell(0, 10, fmt.Sprintf("MyCrib - Tasks Report for %s", report.ResidenceName))
|
||||
pdf.Cell(0, 10, fmt.Sprintf("Casera - Tasks Report for %s", report.ResidenceName))
|
||||
pdf.Ln(5)
|
||||
pdf.Cell(0, 10, fmt.Sprintf("Generated on %s", time.Now().UTC().Format("2006-01-02 15:04:05 UTC")))
|
||||
|
||||
|
||||
@@ -6,11 +6,11 @@ import (
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/config"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/requests"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/responses"
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/config"
|
||||
"github.com/treytartt/casera-api/internal/dto/requests"
|
||||
"github.com/treytartt/casera-api/internal/dto/responses"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
// Common errors
|
||||
|
||||
@@ -7,10 +7,10 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/config"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/requests"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/mycrib-api/internal/testutil"
|
||||
"github.com/treytartt/casera-api/internal/config"
|
||||
"github.com/treytartt/casera-api/internal/dto/requests"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/testutil"
|
||||
)
|
||||
|
||||
func setupResidenceService(t *testing.T) (*ResidenceService, *repositories.ResidenceRepository, *repositories.UserRepository) {
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"github.com/google/uuid"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/config"
|
||||
"github.com/treytartt/casera-api/internal/config"
|
||||
)
|
||||
|
||||
// StorageService handles file uploads to local filesystem
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
// Subscription-related errors
|
||||
|
||||
@@ -9,10 +9,10 @@ import (
|
||||
"github.com/rs/zerolog/log"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/dto/requests"
|
||||
"github.com/treytartt/mycrib-api/internal/dto/responses"
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/dto/requests"
|
||||
"github.com/treytartt/casera-api/internal/dto/responses"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
// Task-related errors
|
||||
|
||||
@@ -8,10 +8,10 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/dto/requests"
|
||||
"github.com/treytartt/mycrib-api/internal/models"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/mycrib-api/internal/testutil"
|
||||
"github.com/treytartt/casera-api/internal/dto/requests"
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/testutil"
|
||||
)
|
||||
|
||||
func setupTaskService(t *testing.T) (*TaskService, *repositories.TaskRepository, *repositories.ResidenceRepository) {
|
||||
|
||||
@@ -3,8 +3,8 @@ package services
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/treytartt/mycrib-api/internal/dto/responses"
|
||||
"github.com/treytartt/mycrib-api/internal/repositories"
|
||||
"github.com/treytartt/casera-api/internal/dto/responses"
|
||||
"github.com/treytartt/casera-api/internal/repositories"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
Reference in New Issue
Block a user