ticket-pimp/internal/controller/project.go

88 lines
2.0 KiB
Go

package controller
import (
"context"
"fmt"
"ticket-pimp/internal/domain"
"ticket-pimp/internal/storage/db"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgtype"
)
func (wc *WorkflowController) Get(ctx context.Context) (*domain.ApplicationConfig, error) {
c, err := wc.q.GetConfig(ctx)
return &domain.ApplicationConfig{
Key: c.TicketKey.String,
ID: int(c.TicketID.Int32),
}, err
}
func (wc *WorkflowController) NewKey(ctx context.Context) (*domain.ApplicationConfig, error) {
c, err := wc.q.SetNewConfig(ctx)
return &domain.ApplicationConfig{
Key: c.TicketKey.String,
ID: int(c.TicketID.Int32),
}, err
}
func (wc *WorkflowController) ProjectCreate(ctx context.Context, project domain.Project) (*domain.Project, error) {
tx, err := wc.pool.Begin(ctx)
if err != nil {
return nil, err
}
defer tx.Rollback(ctx)
qtx := wc.q.WithTx(tx)
appconfig, err := qtx.SetNewConfig(ctx)
if err != nil {
return nil, err
}
project.ShortName = fmt.Sprintf(
"%s-%d",
appconfig.TicketKey.String,
appconfig.TicketID.Int32,
)
project.ID = string(appconfig.TicketID.Int32)
projectRow, err := qtx.CreateTicket(ctx, db.CreateTicketParams{
Key: pgtype.Text{String: project.ShortName, Valid: true},
Channelid: pgtype.Text{String: project.ChannelID, Valid: true},
})
if err != nil {
tx.Rollback(ctx)
return nil, err
} else {
tx.Commit(ctx)
fmt.Println(projectRow)
}
return &project, nil
}
func (wc *WorkflowController) GetProjectByChannelID(ctx context.Context, id string) (*domain.Project, error) {
var proj domain.Project
dbTicket, err := wc.q.GetTicketByChannelID(ctx, pgtype.Text{String: id, Valid: true})
if err != nil {
if err == pgx.ErrNoRows {
return nil, nil
}
return nil, err
} else {
proj = domain.Project{
ID: string(dbTicket.ID),
ShortName: dbTicket.Key.String,
Name: dbTicket.Key.String,
ChannelID: dbTicket.Channelid.String,
ProjectGit: dbTicket.ProjectGit.String,
BuildGit: dbTicket.BuildGit.String,
Cloud: dbTicket.Folder.String,
}
}
return &proj, nil
}