Trey t c51f1ce34a Fix timezone bug in task kanban categorization
Task creation/update responses were using UTC time for kanban column
categorization, causing tasks to incorrectly appear as overdue when
the server had passed midnight UTC but the user's local time was still
the previous day.

Changes:
- Add timezone-aware response functions (NewTaskResponseWithTime, etc.)
- Pass userNow from middleware to all task service methods
- Update handlers to use timezone-aware time from X-Timezone header
- Update tests to pass the now parameter

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 20:56:02 -06:00
2025-11-28 21:10:48 -06:00
2025-12-04 21:11:23 -06:00
2025-11-28 21:10:48 -06:00
2025-11-26 21:05:21 -06:00
2025-12-15 20:15:06 -06:00
2025-12-15 20:15:06 -06:00
2025-11-28 21:10:48 -06:00
2025-11-28 00:27:41 -06:00

Casera API (Go)

Go implementation of the Casera property management API, built with Gin, GORM, and GoAdmin.

Tech Stack

  • HTTP Framework: Gin
  • ORM: GORM with PostgreSQL
  • Push Notifications: Direct APNs (via apns2) + FCM HTTP API
  • Admin Panel: GoAdmin
  • Background Jobs: Asynq
  • Caching: Redis
  • Logging: zerolog
  • Configuration: Viper

Quick Start

Prerequisites

  • Go 1.21+
  • PostgreSQL 15+
  • Redis 7+

Development Setup

# Install dependencies
make deps

# Copy environment file
cp .env.example .env
# Edit .env with your configuration

# Run the API server
make run

Docker Setup

# Start all services
make docker-up

# View logs
make docker-logs

# Stop services
make docker-down

Project Structure

myCribAPI-go/
├── cmd/
│   ├── api/main.go          # API server entry point
│   ├── worker/main.go       # Background worker entry point
│   └── admin/main.go        # GoAdmin server entry point
├── internal/
│   ├── config/              # Configuration management
│   ├── models/              # GORM models
│   ├── database/            # Database connection
│   ├── repositories/        # Data access layer
│   ├── services/            # Business logic
│   ├── handlers/            # HTTP handlers
│   ├── middleware/          # Gin middleware
│   ├── dto/                 # Request/Response DTOs
│   ├── router/              # Route setup
│   ├── push/                # APNs/FCM push notifications
│   ├── worker/              # Asynq jobs
│   └── admin/               # GoAdmin tables
├── pkg/
│   ├── utils/               # Utilities
│   └── errors/              # Error types
├── migrations/              # SQL migrations
├── templates/emails/        # Email templates
├── docker/                  # Docker files
├── go.mod
└── Makefile

API Endpoints

The API maintains 100% compatibility with the Django version.

Public Endpoints (No Auth)

  • GET /api/health/ - Health check
  • POST /api/auth/login/ - Login
  • POST /api/auth/register/ - Register
  • GET /api/static_data/ - Cached lookups

Protected Endpoints (Token Auth)

  • GET /api/residences/ - List residences
  • GET /api/tasks/ - List tasks
  • GET /api/tasks/by-residence/:id/ - Kanban board
  • See full API documentation in the Django project

Configuration

Environment variables (see .env.example):

Variable Description Default
PORT Server port 8000
DEBUG Debug mode false
SECRET_KEY JWT secret required
POSTGRES_* Database config -
REDIS_URL Redis URL redis://localhost:6379/0
APNS_* iOS push config -
FCM_SERVER_KEY Android push key -

Development

# Run tests
make test

# Run tests with coverage
make test-coverage

# Run linter
make lint

# Format code
make fmt

Database

This Go version uses the same PostgreSQL database as the Django version. GORM models are mapped to Django's table names:

  • auth_user - Django's User model
  • user_authtoken - Auth tokens
  • residence_residence - Residences
  • task_task - Tasks

Seeding Data

Seed files are located in seeds/:

  • 001_lookups.sql - Lookup tables (residence types, task categories, priorities, etc.)
  • 002_test_data.sql - Test users, residences, tasks, contractors, etc.

Local Development

# Seed lookup tables
./dev.sh seed

# Seed test data
./dev.sh seed-test

Production (Dokku)

# Seed lookup tables (required)
cat seeds/001_lookups.sql | dokku postgres:connect casera-db

# Seed test data
cat seeds/002_test_data.sql | dokku postgres:connect casera-db

Test Users

All test users have password: password123

Username Email Tier Notes
admin admin@example.com Pro Admin user
john john@example.com Pro Owns 2 residences
jane jane@example.com Free Owns 1 residence, shared access to residence 1
bob bob@example.com Free Owns 1 residence

Test Data Includes

  • 4 residences (house, beach house, apartment, condo)
  • 4 contractors with specialties
  • 10 tasks across residences
  • Documents/warranties
  • Notifications

Migration from Django

This is a full rewrite that maintains API compatibility. The mobile clients (KMM) work with both versions without changes.

License

Proprietary - Casera

Description
No description provided
Readme 3.4 MiB
Languages
Go 75.5%
TypeScript 20.3%
Shell 2.4%
HTML 0.7%
CSS 0.7%
Other 0.2%