init project
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
package studios
|
||||
|
||||
import (
|
||||
"context"
|
||||
"furtuna-be/internal/common/logger"
|
||||
"furtuna-be/internal/entity"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type StudioRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewStudioRepository(db *gorm.DB) *StudioRepository {
|
||||
return &StudioRepository{
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *StudioRepository) CreateStudio(ctx context.Context, studio *entity.StudioDB) (*entity.StudioDB, error) {
|
||||
err := s.db.Omit("ID").Create(studio).Error
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when creating studio", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
return studio, nil
|
||||
}
|
||||
|
||||
func (s *StudioRepository) UpdateStudio(ctx context.Context, studio *entity.StudioDB) (*entity.StudioDB, error) {
|
||||
if err := s.db.Save(studio).Error; err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when updating studio", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
return studio, nil
|
||||
}
|
||||
|
||||
func (s *StudioRepository) GetStudioByID(ctx context.Context, id int64) (*entity.StudioDB, error) {
|
||||
studio := new(entity.StudioDB)
|
||||
if err := s.db.First(studio, id).Error; err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when getting studio by ID", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
return studio, nil
|
||||
}
|
||||
|
||||
func (s *StudioRepository) SearchStudios(ctx context.Context, req entity.StudioSearch) (entity.StudioList, int, error) {
|
||||
var studios []*entity.StudioDB
|
||||
var total int64
|
||||
|
||||
query := s.db
|
||||
|
||||
if req.Id > 0 {
|
||||
query = query.Where("id = ?", req.Id)
|
||||
}
|
||||
|
||||
if req.Name != "" {
|
||||
query = query.Where("name ILIKE ?", "%"+req.Name+"%")
|
||||
}
|
||||
|
||||
if req.Status != "" {
|
||||
query = query.Where("status = ?", req.Status)
|
||||
}
|
||||
|
||||
if req.BranchId > 0 {
|
||||
query = query.Where("branch_id = ?", req.BranchId)
|
||||
}
|
||||
|
||||
if req.Limit > 0 {
|
||||
query = query.Limit(req.Limit)
|
||||
}
|
||||
|
||||
if req.Offset > 0 {
|
||||
query = query.Offset(req.Offset)
|
||||
}
|
||||
|
||||
if err := query.Find(&studios).Error; err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when getting all studios", zap.Error(err))
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if err := s.db.Model(&entity.StudioDB{}).Where(query).Count(&total).Error; err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when counting studios", zap.Error(err))
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return studios, int(total), nil
|
||||
}
|
||||
Reference in New Issue
Block a user