Fix data list

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2025-06-10 11:30:25 -07:00
parent 32ae8e0f67
commit 613eccf0f2
3 changed files with 40 additions and 41 deletions

View File

@@ -27,7 +27,7 @@ import (
) )
type ( type (
Data struct { Datum struct {
ID gid.GID `db:"id"` ID gid.GID `db:"id"`
Name string `db:"name"` Name string `db:"name"`
OrganizationID gid.GID `db:"organization_id"` OrganizationID gid.GID `db:"organization_id"`
@@ -37,10 +37,10 @@ type (
UpdatedAt time.Time `db:"updated_at"` UpdatedAt time.Time `db:"updated_at"`
} }
DataList []*Data Data []*Datum
) )
func (d *Data) CursorKey(field DatumOrderField) page.CursorKey { func (d *Datum) CursorKey(field DatumOrderField) page.CursorKey {
switch field { switch field {
case DatumOrderFieldCreatedAt: case DatumOrderFieldCreatedAt:
return page.NewCursorKey(d.ID, d.CreatedAt) return page.NewCursorKey(d.ID, d.CreatedAt)
@@ -53,7 +53,7 @@ func (d *Data) CursorKey(field DatumOrderField) page.CursorKey {
panic(fmt.Sprintf("unsupported order by: %s", field)) panic(fmt.Sprintf("unsupported order by: %s", field))
} }
func (d *Data) LoadByID( func (d *Datum) LoadByID(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -86,17 +86,17 @@ LIMIT 1;
return fmt.Errorf("cannot query data: %w", err) return fmt.Errorf("cannot query data: %w", err)
} }
data, err := pgx.CollectExactlyOneRow(rows, pgx.RowToStructByName[Data]) datum, err := pgx.CollectExactlyOneRow(rows, pgx.RowToStructByName[Datum])
if err != nil { if err != nil {
return fmt.Errorf("cannot collect data: %w", err) return fmt.Errorf("cannot collect data: %w", err)
} }
*d = data *d = datum
return nil return nil
} }
func (d *Data) LoadByOwnerID( func (d *Datum) LoadByOwnerID(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -128,7 +128,7 @@ LIMIT 1;
return fmt.Errorf("cannot query data: %w", err) return fmt.Errorf("cannot query data: %w", err)
} }
data, err := pgx.CollectExactlyOneRow(rows, pgx.RowToStructByName[Data]) data, err := pgx.CollectExactlyOneRow(rows, pgx.RowToStructByName[Datum])
if err != nil { if err != nil {
return fmt.Errorf("cannot collect data: %w", err) return fmt.Errorf("cannot collect data: %w", err)
} }
@@ -138,7 +138,7 @@ LIMIT 1;
return nil return nil
} }
func (dl *DataList) CountByOrganizationID( func (d *Data) CountByOrganizationID(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -170,7 +170,7 @@ WHERE
return count, nil return count, nil
} }
func (dl *DataList) LoadByOrganizationID( func (d *Data) LoadByOrganizationID(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -205,17 +205,17 @@ WHERE
return fmt.Errorf("cannot query data: %w", err) return fmt.Errorf("cannot query data: %w", err)
} }
data, err := pgx.CollectRows(rows, pgx.RowToAddrOfStructByName[Data]) data, err := pgx.CollectRows(rows, pgx.RowToAddrOfStructByName[Datum])
if err != nil { if err != nil {
return fmt.Errorf("cannot collect data: %w", err) return fmt.Errorf("cannot collect data: %w", err)
} }
*dl = data *d = data
return nil return nil
} }
func (d *Data) Insert( func (d *Datum) Insert(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -261,7 +261,7 @@ INSERT INTO data (
return nil return nil
} }
func (d *Data) Update( func (d *Datum) Update(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -302,17 +302,17 @@ RETURNING
return fmt.Errorf("cannot update data: %w", err) return fmt.Errorf("cannot update data: %w", err)
} }
data, err := pgx.CollectExactlyOneRow(rows, pgx.RowToStructByName[Data]) datum, err := pgx.CollectExactlyOneRow(rows, pgx.RowToStructByName[Datum])
if err != nil { if err != nil {
return fmt.Errorf("cannot collect updated data: %w", err) return fmt.Errorf("cannot collect updated data: %w", err)
} }
*d = data *d = datum
return nil return nil
} }
func (d *Data) Delete( func (d *Datum) Delete(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -338,12 +338,12 @@ WHERE
} }
type DataVendor struct { type DataVendor struct {
DataID gid.GID `db:"data_id"` DatumID gid.GID `db:"datum_id"`
VendorID gid.GID `db:"vendor_id"` VendorID gid.GID `db:"vendor_id"`
CreatedAt time.Time `db:"created_at"` CreatedAt time.Time `db:"created_at"`
} }
func (d *Data) CreateWithVendors( func (d *Datum) CreateWithVendors(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
@@ -369,14 +369,14 @@ func (d *Data) CreateWithVendors(
return nil return nil
} }
func (d *Data) UpdateWithVendors( func (d *Datum) UpdateWithVendors(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,
scope Scoper, scope Scoper,
vendorIDs []gid.GID, vendorIDs []gid.GID,
now time.Time, now time.Time,
) error { ) error {
existing := &Data{} existing := &Datum{}
if err := existing.LoadByID(ctx, conn, scope, d.ID); err != nil { if err := existing.LoadByID(ctx, conn, scope, d.ID); err != nil {
return fmt.Errorf("cannot load data: %w", err) return fmt.Errorf("cannot load data: %w", err)
} }
@@ -411,8 +411,7 @@ func (d *Data) UpdateWithVendors(
return nil return nil
} }
// UpdateWithVendorsTx updates a data entry and its vendor relationships in a single transaction func (d *Datum) UpdateWithVendorsTx(
func (d *Data) UpdateWithVendorsTx(
ctx context.Context, ctx context.Context,
db *pg.Client, db *pg.Client,
scope Scoper, scope Scoper,

View File

@@ -48,8 +48,8 @@ type UpdateDatumRequest struct {
func (s DatumService) Get( func (s DatumService) Get(
ctx context.Context, ctx context.Context,
datumID gid.GID, datumID gid.GID,
) (*coredata.Data, error) { ) (*coredata.Datum, error) {
datum := &coredata.Data{} datum := &coredata.Datum{}
err := s.svc.pg.WithConn( err := s.svc.pg.WithConn(
ctx, ctx,
@@ -68,8 +68,8 @@ func (s DatumService) Get(
func (s DatumService) GetByOwnerID( func (s DatumService) GetByOwnerID(
ctx context.Context, ctx context.Context,
ownerID gid.GID, ownerID gid.GID,
) (*coredata.Data, error) { ) (*coredata.Datum, error) {
datum := &coredata.Data{OwnerID: ownerID} datum := &coredata.Datum{OwnerID: ownerID}
err := s.svc.pg.WithConn( err := s.svc.pg.WithConn(
ctx, ctx,
@@ -94,7 +94,7 @@ func (s DatumService) CountForOrganizationID(
err := s.svc.pg.WithConn( err := s.svc.pg.WithConn(
ctx, ctx,
func(conn pg.Conn) (err error) { func(conn pg.Conn) (err error) {
data := coredata.DataList{} data := coredata.Data{}
count, err = data.CountByOrganizationID(ctx, conn, s.svc.scope, organizationID) count, err = data.CountByOrganizationID(ctx, conn, s.svc.scope, organizationID)
if err != nil { if err != nil {
return fmt.Errorf("cannot count data: %w", err) return fmt.Errorf("cannot count data: %w", err)
@@ -115,8 +115,8 @@ func (s DatumService) ListForOrganizationID(
ctx context.Context, ctx context.Context,
organizationID gid.GID, organizationID gid.GID,
cursor *page.Cursor[coredata.DatumOrderField], cursor *page.Cursor[coredata.DatumOrderField],
) (*page.Page[*coredata.Data, coredata.DatumOrderField], error) { ) (*page.Page[*coredata.Datum, coredata.DatumOrderField], error) {
var data coredata.DataList var data coredata.Data
err := s.svc.pg.WithConn( err := s.svc.pg.WithConn(
ctx, ctx,
@@ -141,17 +141,17 @@ func (s DatumService) ListForOrganizationID(
func (s DatumService) Update( func (s DatumService) Update(
ctx context.Context, ctx context.Context,
req UpdateDatumRequest, req UpdateDatumRequest,
) (*coredata.Data, error) { ) (*coredata.Datum, error) {
now := time.Now() now := time.Now()
existing := &coredata.Data{} existing := &coredata.Datum{}
if err := s.svc.pg.WithConn(ctx, func(conn pg.Conn) error { if err := s.svc.pg.WithConn(ctx, func(conn pg.Conn) error {
return existing.LoadByID(ctx, conn, s.svc.scope, req.ID) return existing.LoadByID(ctx, conn, s.svc.scope, req.ID)
}); err != nil { }); err != nil {
return nil, fmt.Errorf("cannot load data: %w", err) return nil, fmt.Errorf("cannot load data: %w", err)
} }
datum := &coredata.Data{ datum := &coredata.Datum{
ID: req.ID, ID: req.ID,
OrganizationID: existing.OrganizationID, OrganizationID: existing.OrganizationID,
Name: existing.Name, Name: existing.Name,
@@ -182,11 +182,11 @@ func (s DatumService) Update(
func (s DatumService) Create( func (s DatumService) Create(
ctx context.Context, ctx context.Context,
req CreateDatumRequest, req CreateDatumRequest,
) (*coredata.Data, error) { ) (*coredata.Datum, error) {
now := time.Now() now := time.Now()
datumID := gid.New(s.svc.scope.GetTenantID(), coredata.DatumEntityType) datumID := gid.New(s.svc.scope.GetTenantID(), coredata.DatumEntityType)
datum := &coredata.Data{ datum := &coredata.Datum{
ID: datumID, ID: datumID,
OrganizationID: req.OrganizationID, OrganizationID: req.OrganizationID,
Name: req.Name, Name: req.Name,
@@ -214,7 +214,7 @@ func (s DatumService) Delete(
ctx context.Context, ctx context.Context,
datumID gid.GID, datumID gid.GID,
) error { ) error {
datum := &coredata.Data{ID: datumID} datum := &coredata.Datum{ID: datumID}
return s.svc.pg.WithConn( return s.svc.pg.WithConn(
ctx, ctx,

View File

@@ -34,13 +34,13 @@ type (
) )
func NewDataConnection( func NewDataConnection(
p *page.Page[*coredata.Data, coredata.DatumOrderField], p *page.Page[*coredata.Datum, coredata.DatumOrderField],
parentType any, parentType any,
parentID gid.GID, parentID gid.GID,
) *DatumConnection { ) *DatumConnection {
edges := make([]*DatumEdge, len(p.Data)) edges := make([]*DatumEdge, len(p.Data))
for i, data := range p.Data { for i, datum := range p.Data {
edges[i] = NewDatumEdge(data, p.Cursor.OrderBy.Field) edges[i] = NewDatumEdge(datum, p.Cursor.OrderBy.Field)
} }
return &DatumConnection{ return &DatumConnection{
@@ -52,7 +52,7 @@ func NewDataConnection(
} }
} }
func NewDatum(d *coredata.Data) *Datum { func NewDatum(d *coredata.Datum) *Datum {
return &Datum{ return &Datum{
ID: d.ID, ID: d.ID,
Name: d.Name, Name: d.Name,
@@ -63,7 +63,7 @@ func NewDatum(d *coredata.Data) *Datum {
} }
} }
func NewDatumEdge(d *coredata.Data, orderField coredata.DatumOrderField) *DatumEdge { func NewDatumEdge(d *coredata.Datum, orderField coredata.DatumOrderField) *DatumEdge {
return &DatumEdge{ return &DatumEdge{
Node: NewDatum(d), Node: NewDatum(d),
Cursor: d.CursorKey(orderField), Cursor: d.CursorKey(orderField),