mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-25 15:55:44 +00:00
feat[BE#US386]: add production standards module with CRUD operations
- Created database migration for production standards and related tables. - Implemented entities for ProductionStandard, ProductionStandardDetail, and StandardGrowthDetail. - Developed controller for handling production standard requests. - Added DTOs for data transfer between layers. - Implemented service layer for business logic related to production standards. - Created repository interfaces and implementations for data access. - Added validation for production standard requests. - Registered routes for production standards in the main application.
This commit is contained in:
+103
@@ -0,0 +1,103 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gitlab.com/mbugroup/lti-api.git/internal/common/repository"
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type ProductionStandardRepository interface {
|
||||
repository.BaseRepository[entity.ProductionStandard]
|
||||
GetAll(ctx context.Context, offset, limit int, modifier func(*gorm.DB) *gorm.DB) ([]entity.ProductionStandard, int64, error)
|
||||
GetByID(ctx context.Context, id uint, modifier func(*gorm.DB) *gorm.DB) (*entity.ProductionStandard, error)
|
||||
NameExists(ctx context.Context, name string, excludeID *uint) (bool, error)
|
||||
IdExists(ctx context.Context, id uint) (bool, error)
|
||||
GetByProjectCategory(ctx context.Context, projectCategory string) ([]entity.ProductionStandard, error)
|
||||
}
|
||||
|
||||
type ProductionStandardRepositoryImpl struct {
|
||||
*repository.BaseRepositoryImpl[entity.ProductionStandard]
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewProductionStandardRepository(db *gorm.DB) ProductionStandardRepository {
|
||||
return &ProductionStandardRepositoryImpl{
|
||||
BaseRepositoryImpl: repository.NewBaseRepository[entity.ProductionStandard](db),
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *ProductionStandardRepositoryImpl) GetAll(ctx context.Context, offset, limit int, modifier func(*gorm.DB) *gorm.DB) ([]entity.ProductionStandard, int64, error) {
|
||||
var standards []entity.ProductionStandard
|
||||
var total int64
|
||||
|
||||
// Build base query
|
||||
q := r.db.WithContext(ctx).Model(&entity.ProductionStandard{})
|
||||
|
||||
// Apply modifier for filters
|
||||
if modifier != nil {
|
||||
q = modifier(q)
|
||||
}
|
||||
|
||||
// Count total
|
||||
if err := q.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// Re-apply modifier and add preloads for Find
|
||||
q = r.db.WithContext(ctx).Model(&entity.ProductionStandard{})
|
||||
if modifier != nil {
|
||||
q = modifier(q)
|
||||
}
|
||||
q = q.Preload("CreatedUser")
|
||||
|
||||
// Find with offset and limit
|
||||
if err := q.Offset(offset).Limit(limit).Find(&standards).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return standards, total, nil
|
||||
}
|
||||
|
||||
func (r *ProductionStandardRepositoryImpl) GetByID(ctx context.Context, id uint, modifier func(*gorm.DB) *gorm.DB) (*entity.ProductionStandard, error) {
|
||||
var standard entity.ProductionStandard
|
||||
|
||||
q := r.db.WithContext(ctx).Model(&entity.ProductionStandard{})
|
||||
|
||||
// Apply modifier
|
||||
if modifier != nil {
|
||||
q = modifier(q)
|
||||
}
|
||||
|
||||
// Ensure CreatedUser is preloaded
|
||||
q = q.Preload("CreatedUser")
|
||||
|
||||
if err := q.First(&standard, id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &standard, nil
|
||||
}
|
||||
|
||||
func (r *ProductionStandardRepositoryImpl) NameExists(ctx context.Context, name string, excludeID *uint) (bool, error) {
|
||||
return repository.ExistsByName[entity.ProductionStandard](ctx, r.db, name, excludeID)
|
||||
}
|
||||
|
||||
func (r *ProductionStandardRepositoryImpl) IdExists(ctx context.Context, id uint) (bool, error) {
|
||||
return repository.Exists[entity.ProductionStandard](ctx, r.db, id)
|
||||
}
|
||||
|
||||
func (r *ProductionStandardRepositoryImpl) GetByProjectCategory(ctx context.Context, projectCategory string) ([]entity.ProductionStandard, error) {
|
||||
var standards []entity.ProductionStandard
|
||||
err := r.db.WithContext(ctx).
|
||||
Preload("CreatedUser").
|
||||
Where("project_category = ?", projectCategory).
|
||||
Where("deleted_at IS NULL").
|
||||
Find(&standards).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return standards, nil
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gitlab.com/mbugroup/lti-api.git/internal/common/repository"
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type ProductionStandardDetailRepository interface {
|
||||
repository.BaseRepository[entity.ProductionStandardDetail]
|
||||
IdExists(ctx context.Context, id uint) (bool, error)
|
||||
GetByProductionStandardID(ctx context.Context, productionStandardId uint) ([]entity.ProductionStandardDetail, error)
|
||||
GetByStandardIDAndWeek(ctx context.Context, standardId uint, week int) (*entity.ProductionStandardDetail, error)
|
||||
DeleteByProductionStandardID(ctx context.Context, productionStandardId uint) error
|
||||
}
|
||||
|
||||
type ProductionStandardDetailRepositoryImpl struct {
|
||||
*repository.BaseRepositoryImpl[entity.ProductionStandardDetail]
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewProductionStandardDetailRepository(db *gorm.DB) ProductionStandardDetailRepository {
|
||||
return &ProductionStandardDetailRepositoryImpl{
|
||||
BaseRepositoryImpl: repository.NewBaseRepository[entity.ProductionStandardDetail](db),
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *ProductionStandardDetailRepositoryImpl) IdExists(ctx context.Context, id uint) (bool, error) {
|
||||
return repository.Exists[entity.ProductionStandardDetail](ctx, r.db, id)
|
||||
}
|
||||
|
||||
func (r *ProductionStandardDetailRepositoryImpl) GetByProductionStandardID(ctx context.Context, productionStandardId uint) ([]entity.ProductionStandardDetail, error) {
|
||||
var details []entity.ProductionStandardDetail
|
||||
err := r.db.WithContext(ctx).
|
||||
Where("production_standard_id = ?", productionStandardId).
|
||||
Order("week ASC").
|
||||
Find(&details).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return details, nil
|
||||
}
|
||||
|
||||
func (r *ProductionStandardDetailRepositoryImpl) GetByStandardIDAndWeek(ctx context.Context, standardId uint, week int) (*entity.ProductionStandardDetail, error) {
|
||||
var detail entity.ProductionStandardDetail
|
||||
err := r.db.WithContext(ctx).
|
||||
Where("production_standard_id = ?", standardId).
|
||||
Where("week = ?", week).
|
||||
First(&detail).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &detail, nil
|
||||
}
|
||||
|
||||
func (r *ProductionStandardDetailRepositoryImpl) DeleteByProductionStandardID(ctx context.Context, productionStandardId uint) error {
|
||||
return r.db.WithContext(ctx).
|
||||
Where("production_standard_id = ?", productionStandardId).
|
||||
Delete(&entity.ProductionStandardDetail{}).Error
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gitlab.com/mbugroup/lti-api.git/internal/common/repository"
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type StandardGrowthDetailRepository interface {
|
||||
repository.BaseRepository[entity.StandardGrowthDetail]
|
||||
IdExists(ctx context.Context, id uint) (bool, error)
|
||||
GetByProductionStandardID(ctx context.Context, productionStandardId uint) ([]entity.StandardGrowthDetail, error)
|
||||
GetByStandardIDAndWeek(ctx context.Context, standardId uint, week int) (*entity.StandardGrowthDetail, error)
|
||||
DeleteByProductionStandardID(ctx context.Context, productionStandardId uint) error
|
||||
}
|
||||
|
||||
type StandardGrowthDetailRepositoryImpl struct {
|
||||
*repository.BaseRepositoryImpl[entity.StandardGrowthDetail]
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewStandardGrowthDetailRepository(db *gorm.DB) StandardGrowthDetailRepository {
|
||||
return &StandardGrowthDetailRepositoryImpl{
|
||||
BaseRepositoryImpl: repository.NewBaseRepository[entity.StandardGrowthDetail](db),
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *StandardGrowthDetailRepositoryImpl) IdExists(ctx context.Context, id uint) (bool, error) {
|
||||
return repository.Exists[entity.StandardGrowthDetail](ctx, r.db, id)
|
||||
}
|
||||
|
||||
func (r *StandardGrowthDetailRepositoryImpl) GetByProductionStandardID(ctx context.Context, productionStandardId uint) ([]entity.StandardGrowthDetail, error) {
|
||||
var details []entity.StandardGrowthDetail
|
||||
err := r.db.WithContext(ctx).
|
||||
Where("production_standard_id = ?", productionStandardId).
|
||||
Order("week ASC").
|
||||
Find(&details).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return details, nil
|
||||
}
|
||||
|
||||
func (r *StandardGrowthDetailRepositoryImpl) GetByStandardIDAndWeek(ctx context.Context, standardId uint, week int) (*entity.StandardGrowthDetail, error) {
|
||||
var detail entity.StandardGrowthDetail
|
||||
err := r.db.WithContext(ctx).
|
||||
Where("production_standard_id = ?", standardId).
|
||||
Where("week = ?", week).
|
||||
First(&detail).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &detail, nil
|
||||
}
|
||||
|
||||
func (r *StandardGrowthDetailRepositoryImpl) DeleteByProductionStandardID(ctx context.Context, productionStandardId uint) error {
|
||||
return r.db.WithContext(ctx).
|
||||
Where("production_standard_id = ?", productionStandardId).
|
||||
Delete(&entity.StandardGrowthDetail{}).Error
|
||||
}
|
||||
Reference in New Issue
Block a user