feat: implement submission repository and service layer with caching support
All checks were successful
Build and Release / release (push) Successful in 1m32s

This commit is contained in:
2026-05-24 13:11:40 +07:00
parent 9dacfd036d
commit 5a75798609
4 changed files with 117 additions and 30 deletions

View File

@@ -24,6 +24,7 @@ type SubmissionRepository interface {
Update(ctx context.Context, params sqlc.UpdateSubmissionParams) (*models.SubmissionEntity, error)
Delete(ctx context.Context, id pgtype.UUID) error
GetLatestApprovedSubmissionExcluding(ctx context.Context, projectID pgtype.UUID, id pgtype.UUID) (*models.SubmissionEntity, error)
GetLatestApprovedSubmission(ctx context.Context, projectID pgtype.UUID) (*models.SubmissionEntity, error)
WithTx(tx pgx.Tx) SubmissionRepository
}
@@ -349,3 +350,25 @@ func (r *submissionRepository) GetLatestApprovedSubmissionExcluding(ctx context.
}
return entity, nil
}
func (r *submissionRepository) GetLatestApprovedSubmission(ctx context.Context, projectID pgtype.UUID) (*models.SubmissionEntity, error) {
row, err := r.q.GetLatestApprovedSubmission(ctx, projectID)
if err != nil {
return nil, err
}
entity := &models.SubmissionEntity{
ID: convert.UUIDToString(row.ID),
ProjectID: convert.UUIDToString(row.ProjectID),
CommitID: convert.UUIDToString(row.CommitID),
UserID: convert.UUIDToString(row.UserID),
CreatedAt: convert.TimeToPtr(row.CreatedAt),
Status: constants.ParseStatusType(row.Status),
ReviewedBy: convert.UUIDToStringPtr(row.ReviewedBy),
ReviewedAt: convert.TimeToPtr(row.ReviewedAt),
ReviewNote: convert.TextToPtr(row.ReviewNote),
Content: convert.TextToPtr(row.Content),
IsDeleted: row.IsDeleted,
}
return entity, nil
}