composite_model_route_repo.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package repository
  2. import (
  3. "context"
  4. dbent "github.com/Wei-Shaw/sub2api/ent"
  5. "github.com/Wei-Shaw/sub2api/ent/compositemodelroute"
  6. "github.com/Wei-Shaw/sub2api/internal/service"
  7. )
  8. type compositeModelRouteRepository struct {
  9. client *dbent.Client
  10. }
  11. func NewCompositeModelRouteRepository(client *dbent.Client) service.CompositeModelRouteRepository {
  12. return &compositeModelRouteRepository{client: client}
  13. }
  14. func (r *compositeModelRouteRepository) ListByGroup(ctx context.Context, groupID int64, includeDisabled bool) ([]service.CompositeModelRoute, error) {
  15. q := clientFromContext(ctx, r.client).CompositeModelRoute.Query().
  16. Where(compositemodelroute.GroupIDEQ(groupID)).
  17. Order(
  18. dbent.Asc(compositemodelroute.FieldPriority),
  19. dbent.Asc(compositemodelroute.FieldID),
  20. )
  21. if !includeDisabled {
  22. q = q.Where(compositemodelroute.EnabledEQ(true))
  23. }
  24. rows, err := q.All(ctx)
  25. if err != nil {
  26. return nil, err
  27. }
  28. out := make([]service.CompositeModelRoute, 0, len(rows))
  29. for _, row := range rows {
  30. out = append(out, *compositeModelRouteEntityToService(row))
  31. }
  32. return out, nil
  33. }
  34. func (r *compositeModelRouteRepository) Create(ctx context.Context, route *service.CompositeModelRoute) error {
  35. if route == nil {
  36. return service.ErrCompositeRouteNotFound
  37. }
  38. created, err := clientFromContext(ctx, r.client).CompositeModelRoute.Create().
  39. SetGroupID(route.GroupID).
  40. SetPublicModel(route.PublicModel).
  41. SetMatchType(route.MatchType).
  42. SetTargetPlatform(route.TargetPlatform).
  43. SetUpstreamModel(route.UpstreamModel).
  44. SetEndpoint(route.Endpoint).
  45. SetPriority(route.Priority).
  46. SetEnabled(route.Enabled).
  47. SetNotes(route.Notes).
  48. Save(ctx)
  49. if err != nil {
  50. return translatePersistenceError(err, nil, service.ErrCompositeRouteExists)
  51. }
  52. *route = *compositeModelRouteEntityToService(created)
  53. return nil
  54. }
  55. func (r *compositeModelRouteRepository) Update(ctx context.Context, route *service.CompositeModelRoute) error {
  56. if route == nil {
  57. return service.ErrCompositeRouteNotFound
  58. }
  59. updated, err := clientFromContext(ctx, r.client).CompositeModelRoute.UpdateOneID(route.ID).
  60. SetPublicModel(route.PublicModel).
  61. SetMatchType(route.MatchType).
  62. SetTargetPlatform(route.TargetPlatform).
  63. SetUpstreamModel(route.UpstreamModel).
  64. SetEndpoint(route.Endpoint).
  65. SetPriority(route.Priority).
  66. SetEnabled(route.Enabled).
  67. SetNotes(route.Notes).
  68. Save(ctx)
  69. if err != nil {
  70. return translatePersistenceError(err, service.ErrCompositeRouteNotFound, service.ErrCompositeRouteExists)
  71. }
  72. *route = *compositeModelRouteEntityToService(updated)
  73. return nil
  74. }
  75. func (r *compositeModelRouteRepository) Delete(ctx context.Context, id int64) error {
  76. err := clientFromContext(ctx, r.client).CompositeModelRoute.DeleteOneID(id).Exec(ctx)
  77. return translatePersistenceError(err, service.ErrCompositeRouteNotFound, nil)
  78. }
  79. func (r *compositeModelRouteRepository) DeleteByGroup(ctx context.Context, groupID int64) error {
  80. _, err := clientFromContext(ctx, r.client).CompositeModelRoute.Delete().
  81. Where(compositemodelroute.GroupIDEQ(groupID)).
  82. Exec(ctx)
  83. return err
  84. }
  85. func compositeModelRouteEntityToService(row *dbent.CompositeModelRoute) *service.CompositeModelRoute {
  86. if row == nil {
  87. return nil
  88. }
  89. return &service.CompositeModelRoute{
  90. ID: row.ID,
  91. GroupID: row.GroupID,
  92. PublicModel: row.PublicModel,
  93. MatchType: row.MatchType,
  94. TargetPlatform: row.TargetPlatform,
  95. UpstreamModel: row.UpstreamModel,
  96. Endpoint: row.Endpoint,
  97. Priority: row.Priority,
  98. Enabled: row.Enabled,
  99. Notes: derefString(row.Notes),
  100. CreatedAt: row.CreatedAt,
  101. UpdatedAt: row.UpdatedAt,
  102. }
  103. }