Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
114 lines
3.6 KiB
Go
114 lines
3.6 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
|
|
dbent "github.com/Wei-Shaw/sub2api/ent"
|
|
"github.com/Wei-Shaw/sub2api/ent/compositemodelroute"
|
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
|
)
|
|
|
|
type compositeModelRouteRepository struct {
|
|
client *dbent.Client
|
|
}
|
|
|
|
func NewCompositeModelRouteRepository(client *dbent.Client) service.CompositeModelRouteRepository {
|
|
return &compositeModelRouteRepository{client: client}
|
|
}
|
|
|
|
func (r *compositeModelRouteRepository) ListByGroup(ctx context.Context, groupID int64, includeDisabled bool) ([]service.CompositeModelRoute, error) {
|
|
q := clientFromContext(ctx, r.client).CompositeModelRoute.Query().
|
|
Where(compositemodelroute.GroupIDEQ(groupID)).
|
|
Order(
|
|
dbent.Asc(compositemodelroute.FieldPriority),
|
|
dbent.Asc(compositemodelroute.FieldID),
|
|
)
|
|
if !includeDisabled {
|
|
q = q.Where(compositemodelroute.EnabledEQ(true))
|
|
}
|
|
rows, err := q.All(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]service.CompositeModelRoute, 0, len(rows))
|
|
for _, row := range rows {
|
|
out = append(out, *compositeModelRouteEntityToService(row))
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func (r *compositeModelRouteRepository) Create(ctx context.Context, route *service.CompositeModelRoute) error {
|
|
if route == nil {
|
|
return service.ErrCompositeRouteNotFound
|
|
}
|
|
created, err := clientFromContext(ctx, r.client).CompositeModelRoute.Create().
|
|
SetGroupID(route.GroupID).
|
|
SetPublicModel(route.PublicModel).
|
|
SetMatchType(route.MatchType).
|
|
SetTargetPlatform(route.TargetPlatform).
|
|
SetUpstreamModel(route.UpstreamModel).
|
|
SetEndpoint(route.Endpoint).
|
|
SetPriority(route.Priority).
|
|
SetEnabled(route.Enabled).
|
|
SetNotes(route.Notes).
|
|
Save(ctx)
|
|
if err != nil {
|
|
return translatePersistenceError(err, nil, service.ErrCompositeRouteExists)
|
|
}
|
|
*route = *compositeModelRouteEntityToService(created)
|
|
return nil
|
|
}
|
|
|
|
func (r *compositeModelRouteRepository) Update(ctx context.Context, route *service.CompositeModelRoute) error {
|
|
if route == nil {
|
|
return service.ErrCompositeRouteNotFound
|
|
}
|
|
updated, err := clientFromContext(ctx, r.client).CompositeModelRoute.UpdateOneID(route.ID).
|
|
SetPublicModel(route.PublicModel).
|
|
SetMatchType(route.MatchType).
|
|
SetTargetPlatform(route.TargetPlatform).
|
|
SetUpstreamModel(route.UpstreamModel).
|
|
SetEndpoint(route.Endpoint).
|
|
SetPriority(route.Priority).
|
|
SetEnabled(route.Enabled).
|
|
SetNotes(route.Notes).
|
|
Save(ctx)
|
|
if err != nil {
|
|
return translatePersistenceError(err, service.ErrCompositeRouteNotFound, service.ErrCompositeRouteExists)
|
|
}
|
|
*route = *compositeModelRouteEntityToService(updated)
|
|
return nil
|
|
}
|
|
|
|
func (r *compositeModelRouteRepository) Delete(ctx context.Context, id int64) error {
|
|
err := clientFromContext(ctx, r.client).CompositeModelRoute.DeleteOneID(id).Exec(ctx)
|
|
return translatePersistenceError(err, service.ErrCompositeRouteNotFound, nil)
|
|
}
|
|
|
|
func (r *compositeModelRouteRepository) DeleteByGroup(ctx context.Context, groupID int64) error {
|
|
_, err := clientFromContext(ctx, r.client).CompositeModelRoute.Delete().
|
|
Where(compositemodelroute.GroupIDEQ(groupID)).
|
|
Exec(ctx)
|
|
return err
|
|
}
|
|
|
|
func compositeModelRouteEntityToService(row *dbent.CompositeModelRoute) *service.CompositeModelRoute {
|
|
if row == nil {
|
|
return nil
|
|
}
|
|
return &service.CompositeModelRoute{
|
|
ID: row.ID,
|
|
GroupID: row.GroupID,
|
|
PublicModel: row.PublicModel,
|
|
MatchType: row.MatchType,
|
|
TargetPlatform: row.TargetPlatform,
|
|
UpstreamModel: row.UpstreamModel,
|
|
Endpoint: row.Endpoint,
|
|
Priority: row.Priority,
|
|
Enabled: row.Enabled,
|
|
Notes: derefString(row.Notes),
|
|
CreatedAt: row.CreatedAt,
|
|
UpdatedAt: row.UpdatedAt,
|
|
}
|
|
}
|