105 lines
3.4 KiB
Go
105 lines
3.4 KiB
Go
package mysql
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
easarelease "wucher/internal/domain/easa_release"
|
|
)
|
|
|
|
type EASAReleaseRepository struct{ db *gorm.DB }
|
|
|
|
func NewEASAReleaseRepository(db *gorm.DB) *EASAReleaseRepository {
|
|
return &EASAReleaseRepository{db: db}
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) Create(ctx context.Context, row *easarelease.EASARelease) error {
|
|
return r.db.WithContext(ctx).Create(row).Error
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) Update(ctx context.Context, row *easarelease.EASARelease) error {
|
|
return r.db.WithContext(ctx).Save(row).Error
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) Delete(ctx context.Context, id []byte, deletedBy []byte) error {
|
|
return r.db.WithContext(ctx).Model(&easarelease.EASARelease{}).
|
|
Where("id = ? AND deleted_at IS NULL", id).
|
|
Updates(map[string]any{"deleted_at": gorm.Expr("NOW(3)"), "deleted_by": deletedBy, "updated_by": deletedBy}).Error
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) GetByID(ctx context.Context, id []byte) (*easarelease.EASARelease, error) {
|
|
var row easarelease.EASARelease
|
|
err := r.db.WithContext(ctx).
|
|
Where("id = ? AND deleted_at IS NULL", id).
|
|
First(&row).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return &row, err
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) GetByFlightID(ctx context.Context, flightID []byte) (*easarelease.EASARelease, error) {
|
|
var row easarelease.EASARelease
|
|
err := r.db.WithContext(ctx).
|
|
Where("flight_id = ? AND deleted_at IS NULL", flightID).
|
|
Order("created_at DESC").
|
|
First(&row).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return &row, err
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) GetByComplaintID(ctx context.Context, complaintID []byte) (*easarelease.EASARelease, error) {
|
|
var row easarelease.EASARelease
|
|
err := r.db.WithContext(ctx).
|
|
Where("complaint_id = ? AND deleted_at IS NULL", complaintID).
|
|
Order("created_at DESC").
|
|
First(&row).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return &row, err
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) ListByHelicopter(ctx context.Context, helicopterID []byte) ([]easarelease.EASARelease, error) {
|
|
rows := make([]easarelease.EASARelease, 0)
|
|
err := r.db.WithContext(ctx).
|
|
Where("helicopter_id = ? AND deleted_at IS NULL", helicopterID).
|
|
Order("created_at DESC").
|
|
Find(&rows).Error
|
|
return rows, err
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) GetLatestByHelicopter(ctx context.Context, helicopterID []byte) (*easarelease.EASARelease, error) {
|
|
var row easarelease.EASARelease
|
|
err := r.db.WithContext(ctx).
|
|
Where("helicopter_id = ? AND deleted_at IS NULL", helicopterID).
|
|
Order("created_at DESC").
|
|
First(&row).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return &row, err
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) GetActiveByHelicopter(ctx context.Context, helicopterID []byte) (*easarelease.EASARelease, error) {
|
|
var row easarelease.EASARelease
|
|
err := r.db.WithContext(ctx).
|
|
Where("helicopter_id = ? AND signed_at IS NOT NULL AND deleted_at IS NULL", helicopterID).
|
|
Order("signed_at DESC").
|
|
First(&row).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return &row, err
|
|
}
|
|
|
|
func (r *EASAReleaseRepository) VoidByID(ctx context.Context, id []byte, reason string, actor []byte) error {
|
|
return r.db.WithContext(ctx).Model(&easarelease.EASARelease{}).
|
|
Where("id = ? AND deleted_at IS NULL", id).
|
|
Updates(map[string]any{"deleted_at": gorm.Expr("NOW(3)"), "deleted_by": actor, "updated_by": actor}).Error
|
|
}
|