You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.4 KiB
126 lines
3.4 KiB
package mysql
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"git.aiterp.net/stufflog3/stufflog3/entities"
|
|
"git.aiterp.net/stufflog3/stufflog3/models"
|
|
"git.aiterp.net/stufflog3/stufflog3/ports/mysql/mysqlcore"
|
|
"time"
|
|
)
|
|
|
|
type sprintRepository struct {
|
|
db *sql.DB
|
|
q *mysqlcore.Queries
|
|
}
|
|
|
|
func (r *sprintRepository) Find(ctx context.Context, scopeID, sprintID int) (*entities.Sprint, error) {
|
|
row, err := r.q.GetSprint(ctx, mysqlcore.GetSprintParams{ScopeID: scopeID, ID: sprintID})
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return nil, models.NotFoundError("Sprint")
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
return &entities.Sprint{
|
|
ID: row.ID,
|
|
ScopeID: row.ScopeID,
|
|
Name: row.Name,
|
|
Description: row.Description,
|
|
Kind: models.SprintKind(row.Kind),
|
|
FromTime: row.FromTime,
|
|
ToTime: row.ToTime,
|
|
IsTimed: row.IsTimed,
|
|
IsCoarse: row.IsCoarse,
|
|
IsUnweighted: row.IsUnweighted,
|
|
AggregateName: row.AggregateName,
|
|
AggregateRequired: row.AggregateRequired,
|
|
}, nil
|
|
}
|
|
|
|
func (r *sprintRepository) ListAt(ctx context.Context, scopeID int, at time.Time) ([]entities.Sprint, error) {
|
|
rows, err := r.q.ListSprintsAt(ctx, mysqlcore.ListSprintsAtParams{ScopeID: scopeID, Time: at})
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return nil, models.NotFoundError("Sprint")
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
sprints := make([]entities.Sprint, 0, len(rows))
|
|
for _, row := range rows {
|
|
sprints = append(sprints, entities.Sprint{
|
|
ID: row.ID,
|
|
ScopeID: row.ScopeID,
|
|
Name: row.Name,
|
|
Description: row.Description,
|
|
Kind: models.SprintKind(row.Kind),
|
|
FromTime: row.FromTime,
|
|
ToTime: row.ToTime,
|
|
IsTimed: row.IsTimed,
|
|
IsCoarse: row.IsCoarse,
|
|
IsUnweighted: row.IsUnweighted,
|
|
AggregateName: row.AggregateName,
|
|
AggregateRequired: row.AggregateRequired,
|
|
})
|
|
}
|
|
|
|
return sprints, nil
|
|
}
|
|
|
|
func (r *sprintRepository) ListBetween(ctx context.Context, scopeID int, from, to time.Time) ([]entities.Sprint, error) {
|
|
rows, err := r.q.ListSprintsBetween(ctx, mysqlcore.ListSprintsBetweenParams{
|
|
ScopeID: scopeID,
|
|
FromTime: from,
|
|
ToTime: from,
|
|
FromTime_2: to,
|
|
ToTime_2: to,
|
|
FromTime_3: from,
|
|
ToTime_3: to,
|
|
})
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return nil, models.NotFoundError("Sprint")
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
sprints := make([]entities.Sprint, 0, len(rows))
|
|
for _, row := range rows {
|
|
sprints = append(sprints, entities.Sprint{
|
|
ID: row.ID,
|
|
ScopeID: row.ScopeID,
|
|
Name: row.Name,
|
|
Description: row.Description,
|
|
Kind: models.SprintKind(row.Kind),
|
|
FromTime: row.FromTime,
|
|
ToTime: row.ToTime,
|
|
IsTimed: row.IsTimed,
|
|
IsCoarse: row.IsCoarse,
|
|
IsUnweighted: row.IsUnweighted,
|
|
AggregateName: row.AggregateName,
|
|
AggregateRequired: row.AggregateRequired,
|
|
})
|
|
}
|
|
|
|
return sprints, nil
|
|
}
|
|
|
|
func (r *sprintRepository) Create(ctx context.Context, sprint entities.Sprint) (*entities.Sprint, error) {
|
|
//TODO implement me
|
|
panic("implement me")
|
|
}
|
|
|
|
func (r *sprintRepository) Update(ctx context.Context, sprint entities.Sprint, update models.SprintUpdate) error {
|
|
//TODO implement me
|
|
panic("implement me")
|
|
}
|
|
|
|
func (r *sprintRepository) Delete(ctx context.Context, sprint entities.Sprint) error {
|
|
//TODO implement me
|
|
panic("implement me")
|
|
}
|