package org import ( "context" "time" "github.com/google/uuid" "gorm.io/gorm" ) type OrgRepository interface { Create(ctx context.Context, org *Organization) error FindByID(ctx context.Context, id string) (*Organization, error) FindAll(ctx context.Context, limit, offset int) ([]Organization, error) Count(ctx context.Context) (int, error) Update(ctx context.Context, org *Organization) error Delete(ctx context.Context, id string) (bool, error) } type Repository struct { db *gorm.DB } func NewRepository(db *gorm.DB) *Repository { return &Repository{db: db} } func (r *Repository) Create(ctx context.Context, org *Organization) error { org.ID = uuid.New().String() now := time.Now().UTC() org.CreatedAt = now org.UpdatedAt = now return r.db.WithContext(ctx).Create(org).Error } func (r *Repository) FindByID(ctx context.Context, id string) (*Organization, error) { var org Organization err := r.db.WithContext(ctx).Where("id = ?", id).First(&org).Error if err != nil { return nil, err } return &org, nil } func (r *Repository) FindAll(ctx context.Context, limit, offset int) ([]Organization, error) { var orgs []Organization err := r.db.WithContext(ctx). Order("created_at DESC"). Limit(limit). Offset(offset). Find(&orgs).Error return orgs, err } func (r *Repository) Count(ctx context.Context) (int, error) { var total int64 err := r.db.WithContext(ctx).Model(&Organization{}).Count(&total).Error return int(total), err } func (r *Repository) Update(ctx context.Context, org *Organization) error { return r.db.WithContext(ctx).Model(org).Update("name", org.Name).Error } func (r *Repository) Delete(ctx context.Context, id string) (bool, error) { result := r.db.WithContext(ctx).Delete(&Organization{}, "id = ?", id) if result.Error != nil { return false, result.Error } return result.RowsAffected > 0, nil }