Skip to content

Commit

Permalink
WIP: SpecialistRepository
Browse files Browse the repository at this point in the history
  • Loading branch information
emacsway committed May 28, 2024
1 parent 7a2e034 commit ced92b6
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 5 deletions.
8 changes: 4 additions & 4 deletions grade/internal/domain/specialist/specialist.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/emacsway/grade/grade/internal/domain/artifact"
"github.com/emacsway/grade/grade/internal/domain/endorser"
"github.com/emacsway/grade/grade/internal/domain/grade"
member "github.com/emacsway/grade/grade/internal/domain/member/values"
memberVal "github.com/emacsway/grade/grade/internal/domain/member/values"
"github.com/emacsway/grade/grade/internal/domain/seedwork/aggregate"
"github.com/emacsway/grade/grade/internal/domain/specialist/assignment"
assignmentVal "github.com/emacsway/grade/grade/internal/domain/specialist/assignment/values"
Expand Down Expand Up @@ -40,7 +40,7 @@ var (

// FIXME: Move this constructor to tenant aggregate
func NewSpecialist(
id member.MemberId,
id memberVal.MemberId,
createdAt time.Time,
) (*Specialist, error) {
zeroGrade, _ := grade.DefaultConstructor(0)
Expand All @@ -52,7 +52,7 @@ func NewSpecialist(
}

type Specialist struct {
id member.MemberId
id memberVal.MemberId
grade grade.Grade
receivedEndorsements []endorsement.Endorsement
assignments []assignment.Assignment
Expand Down Expand Up @@ -191,7 +191,7 @@ func (s Specialist) Export(ex SpecialistExporterSetter) {
}

type SpecialistExporterSetter interface {
SetId(member.MemberId)
SetId(memberVal.MemberId)
SetGrade(grade.Grade)
AddEndorsement(endorsement.Endorsement)
AddAssignment(assignment.Assignment)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,67 @@
package queries

import (
"time"

"github.com/emacsway/grade/grade/internal/domain/grade"
memberVal "github.com/emacsway/grade/grade/internal/domain/member/values"
"github.com/emacsway/grade/grade/internal/domain/seedwork/exporters"
"github.com/emacsway/grade/grade/internal/domain/specialist/assignment"
"github.com/emacsway/grade/grade/internal/domain/specialist/endorsement"
tenantVal "github.com/emacsway/grade/grade/internal/domain/tenant/values"
"github.com/emacsway/grade/grade/internal/infrastructure/seedwork/session"
)

type SpecialistInsertQuery struct {
// params [9]any
params [9]any
}

func (q SpecialistInsertQuery) sql() string {
return `
INSERT INTO specialist (
tenant_id, member_id, grade, created_at, version
) VALUES ($1, $2, $3, $4, $5)
ON CONFLICT DO NOTHING`
}

func (q *SpecialistInsertQuery) SetId(val memberVal.MemberId) {
val.Export(q)
}

func (q *SpecialistInsertQuery) SetTenantId(val tenantVal.TenantId) {
var v exporters.UintExporter
val.Export(&v)
q.params[0] = v
}

func (q *SpecialistInsertQuery) SetMemberId(val memberVal.InternalMemberId) {
var v exporters.UintExporter
val.Export(&v)
q.params[1] = v
}

func (q *SpecialistInsertQuery) SetGrade(val grade.Grade) {
var v exporters.Uint8Exporter
val.Export(&v)
q.params[2] = v
}

func (q *SpecialistInsertQuery) AddEndorsement(endorsement.Endorsement) {

}

func (q *SpecialistInsertQuery) AddAssignment(assignment.Assignment) {

}

func (q *SpecialistInsertQuery) SetCreatedAt(val time.Time) {
q.params[3] = val
}

func (q *SpecialistInsertQuery) SetVersion(val uint) {
q.params[4] = val
}

func (q *SpecialistInsertQuery) Evaluate(s session.DbSessionExecutor) (session.Result, error) {
return s.Exec(q.sql(), q.params[:]...)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package specialist

import (
"fmt"

"github.com/emacsway/grade/grade/internal/domain/specialist"
"github.com/emacsway/grade/grade/internal/infrastructure/repositories/specialist/queries"
"github.com/emacsway/grade/grade/internal/infrastructure/seedwork/session"
)

func NewSpecialistRepository(currentSession session.DbSession) *SpecialistRepository {
return &SpecialistRepository{
session: currentSession,
}
}

type SpecialistRepository struct {
session session.DbSession
}

func (r SpecialistRepository) Insert(agg *specialist.Specialist) error {
q := queries.SpecialistInsertQuery{}
agg.Export(&q)
result, err := q.Evaluate(r.session)
if err != nil {
return err
}
affectedRows, err := result.RowsAffected()
if err != nil {
return err
}
if affectedRows != 1 {
return fmt.Errorf("wrong rows affected: %d", affectedRows)
}
return nil
}

/*
func (r *SpecialistRepository) Get(id memberVal.MemberId) (*specialist.Specialist, error) {
q := queries.SpecialistGetQuery{Id: id}
return q.Get(r.session)
}
*/

0 comments on commit ced92b6

Please sign in to comment.