Skip to content

Commit

Permalink
wip: create project
Browse files Browse the repository at this point in the history
  • Loading branch information
katallaxie authored Jul 15, 2024
1 parent 8e7856b commit 5c5fc72
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 0 deletions.
5 changes: 5 additions & 0 deletions internal/adapters/database/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ func (rw *writeTxImpl) DeleteLock(ctx context.Context, lock *models.Lock) error
return rw.conn.Delete(lock).Error
}

// CreateProject creates a new project.
func (rw *writeTxImpl) CreateProject(ctx context.Context, project *models.Project) error {
return rw.conn.Create(project).Error
}

// UpdateState...
func (rw *writeTxImpl) UpdateState(ctx context.Context, state *models.State) error {
latest := models.State{}
Expand Down
60 changes: 60 additions & 0 deletions internal/controllers/project.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package controllers

import (
"context"

"github.com/zeiss/fiber-goth/adapters"
seed "github.com/zeiss/gorm-seed"
"github.com/zeiss/knox/internal/models"
"github.com/zeiss/knox/internal/ports"
"github.com/zeiss/knox/pkg/utils"
)

var _ ProjectController = (*ProjectControllerImpl)(nil)

// CreateProjectCommand ...
type CreateProjectCommand struct {
Team string `json:"team" form:"team"`
Name string `json:"name" form:"name"`
Description string `json:"description" form:"description"`
}

// ProjectControllerImpl ...
type ProjectControllerImpl struct {
store seed.Database[ports.ReadTx, ports.ReadWriteTx]
}

// ProjectController ...
type ProjectController interface {
// CreateProject ...
CreateProject(ctx context.Context, cmd CreateProjectCommand) error
}

// NewProjectController ...
func NewProjectController(store seed.Database[ports.ReadTx, ports.ReadWriteTx]) *ProjectControllerImpl {
return &ProjectControllerImpl{store}
}

// CreateProject ...
func (c *ProjectControllerImpl) CreateProject(ctx context.Context, cmd CreateProjectCommand) error {
team := adapters.GothTeam{
Slug: cmd.Team,
}

err := c.store.ReadTx(ctx, func(ctx context.Context, tx ports.ReadTx) error {
return tx.GetTeam(ctx, &team)
})
if err != nil {
return err
}

project := models.Project{
Name: cmd.Name,
Description: utils.StrPtr(cmd.Description),
Team: team,
}

return c.store.ReadWriteTx(ctx, func(ctx context.Context, tx ports.ReadWriteTx) error {
return tx.CreateProject(ctx, &project)
})
}
2 changes: 2 additions & 0 deletions internal/ports/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ type ReadWriteTx interface {
CreateTeam(context.Context, *adapters.GothTeam) error
// DeleteTeam deletes a team.
DeleteTeam(context.Context, *adapters.GothTeam) error
// CreateProject creates a new project.
CreateProject(context.Context, *models.Project) error

ReadTx
}
23 changes: 23 additions & 0 deletions pkg/dto/project.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package dto

import (
"github.com/zeiss/knox/internal/controllers"
openapi "github.com/zeiss/knox/pkg/apis"
"github.com/zeiss/knox/pkg/utils"
)

// FromCreateProjectRequestObject ...
func FromCreateProjectRequestObject(req openapi.CreateProjectRequestObject) controllers.CreateProjectCommand {
return controllers.CreateProjectCommand{
Team: req.TeamId,
Name: utils.PtrStr(req.Body.Name),
Description: utils.PtrStr(req.Body.Description),
}
}

// ToCreateProjectResponseObject ...
func ToCreateProjectResponseObject() openapi.CreateProject201JSONResponse {
res := openapi.CreateProject201JSONResponse{}

return res
}

0 comments on commit 5c5fc72

Please sign in to comment.