package repository import ( "context" "time" "github.com/geo-platform/tenant-api/internal/tenant/repository/generated" ) type ImageFolder struct { ID int64 TenantID int64 Name string ImageCount int CreatedAt time.Time UpdatedAt time.Time } type ImageFolderRepository interface { List(ctx context.Context, tenantID int64) ([]ImageFolder, error) Get(ctx context.Context, tenantID, id int64) (*ImageFolder, error) Create(ctx context.Context, tenantID int64, name string) (int64, error) Update(ctx context.Context, tenantID, id int64, name string) error Delete(ctx context.Context, tenantID, id int64) error CountActiveImages(ctx context.Context, tenantID, folderID int64) (int, error) } type imageFolderRepository struct { q generated.Querier } func NewImageFolderRepository(db generated.DBTX) ImageFolderRepository { return &imageFolderRepository{q: newQuerier(db)} } func (r *imageFolderRepository) List(ctx context.Context, tenantID int64) ([]ImageFolder, error) { rows, err := r.q.ListImageFolders(ctx, tenantID) if err != nil { return nil, err } folders := make([]ImageFolder, len(rows)) for i, row := range rows { folders[i] = ImageFolder{ ID: row.ID, TenantID: row.TenantID, Name: row.Name, ImageCount: int(row.ImageCount), CreatedAt: timeFromTimestamp(row.CreatedAt), UpdatedAt: timeFromTimestamp(row.UpdatedAt), } } return folders, nil } func (r *imageFolderRepository) Get(ctx context.Context, tenantID, id int64) (*ImageFolder, error) { row, err := r.q.GetImageFolder(ctx, generated.GetImageFolderParams{ ID: id, TenantID: tenantID, }) if err != nil { return nil, err } return &ImageFolder{ ID: row.ID, TenantID: row.TenantID, Name: row.Name, CreatedAt: timeFromTimestamp(row.CreatedAt), UpdatedAt: timeFromTimestamp(row.UpdatedAt), }, nil } func (r *imageFolderRepository) Create(ctx context.Context, tenantID int64, name string) (int64, error) { return r.q.CreateImageFolder(ctx, generated.CreateImageFolderParams{ TenantID: tenantID, Name: name, }) } func (r *imageFolderRepository) Update(ctx context.Context, tenantID, id int64, name string) error { return r.q.UpdateImageFolder(ctx, generated.UpdateImageFolderParams{ Name: name, ID: id, TenantID: tenantID, }) } func (r *imageFolderRepository) Delete(ctx context.Context, tenantID, id int64) error { return r.q.DeleteImageFolder(ctx, generated.DeleteImageFolderParams{ ID: id, TenantID: tenantID, }) } func (r *imageFolderRepository) CountActiveImages(ctx context.Context, tenantID, folderID int64) (int, error) { count, err := r.q.CountActiveImagesInFolder(ctx, generated.CountActiveImagesInFolderParams{ TenantID: tenantID, FolderID: pgInt8(&folderID), }) if err != nil { return 0, err } return int(count), nil }