Files
mantrae/server/internal/api/service/traefik_instance.go
2025-07-31 00:37:57 +02:00

71 lines
2.1 KiB
Go

package service
import (
"context"
"connectrpc.com/connect"
"github.com/mizuchilabs/mantrae/server/internal/config"
"github.com/mizuchilabs/mantrae/server/internal/store/db"
mantraev1 "github.com/mizuchilabs/mantrae/proto/gen/mantrae/v1"
)
type TraefikInstanceService struct {
app *config.App
}
func NewTraefikInstanceService(app *config.App) *TraefikInstanceService {
return &TraefikInstanceService{app: app}
}
func (s *TraefikInstanceService) GetTraefikInstance(
ctx context.Context,
req *connect.Request[mantraev1.GetTraefikInstanceRequest],
) (*connect.Response[mantraev1.GetTraefikInstanceResponse], error) {
result, err := s.app.Conn.GetQuery().GetTraefikInstanceByID(ctx, req.Msg.Id)
if err != nil {
return nil, err
}
return connect.NewResponse(&mantraev1.GetTraefikInstanceResponse{
TraefikInstance: result.ToProto(),
}), nil
}
func (s *TraefikInstanceService) DeleteTraefikInstance(
ctx context.Context,
req *connect.Request[mantraev1.DeleteTraefikInstanceRequest],
) (*connect.Response[mantraev1.DeleteTraefikInstanceResponse], error) {
if err := s.app.Conn.GetQuery().DeleteTraefikInstance(ctx, req.Msg.Id); err != nil {
return nil, err
}
return connect.NewResponse(&mantraev1.DeleteTraefikInstanceResponse{}), nil
}
func (s *TraefikInstanceService) ListTraefikInstances(
ctx context.Context,
req *connect.Request[mantraev1.ListTraefikInstancesRequest],
) (*connect.Response[mantraev1.ListTraefikInstancesResponse], error) {
params := db.ListTraefikInstancesParams{
ProfileID: req.Msg.ProfileId,
Limit: req.Msg.Limit,
Offset: req.Msg.Offset,
}
result, err := s.app.Conn.GetQuery().ListTraefikInstances(ctx, params)
if err != nil {
return nil, err
}
totalCount, err := s.app.Conn.GetQuery().CountTraefikInstances(ctx, req.Msg.ProfileId)
if err != nil {
return nil, err
}
instances := make([]*mantraev1.TraefikInstance, 0, len(result))
for _, i := range result {
instances = append(instances, i.ToProto())
}
return connect.NewResponse(&mantraev1.ListTraefikInstancesResponse{
TraefikInstances: instances,
TotalCount: totalCount,
}), nil
}