Add projects

This commit is contained in:
2022-02-14 01:25:36 +01:00
parent 3e843d429a
commit cb0917d916
14 changed files with 262 additions and 23 deletions

58
main.go
View File

@@ -14,9 +14,10 @@ import (
"io/ioutil"
"net/http"
"os"
"serverctl/pkg/application/projects"
"serverctl/pkg/application/users"
"serverctl/pkg/db"
"serverctl/pkg/db/postgres"
"serverctl/pkg/users"
"time"
)
@@ -76,7 +77,7 @@ func BasicAuthMiddleware(l *zap.Logger, us *users.Service) gin.HandlerFunc {
c.Next()
}
}
func setupApi(l *zap.Logger, cc *cache.Cache, us *users.Service) {
func setupApi(l *zap.Logger, cc *cache.Cache, us *users.Service, ps *projects.Service) {
l.Info("Setting up serverctl setupApi (using gin)")
r := gin.Default()
@@ -100,6 +101,53 @@ func setupApi(l *zap.Logger, cc *cache.Cache, us *users.Service) {
c.JSON(http.StatusCreated, gin.H{"message": "user has been registered", "userId": createUser})
})
projectsApi := r.Group("/projects", BasicAuthMiddleware(l, us))
projectsApi.POST("/", func(c *gin.Context) {
type CreateProjectRequest struct {
Name string `json:"name" binding:"required"`
}
var createProjectRequest CreateProjectRequest
if err := c.BindJSON(&createProjectRequest); err != nil {
return
}
userId, _ := c.Get("userId")
createProjectId, err := ps.CreateProject(c.Request.Context(), userId.(int), createProjectRequest.Name)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"message": "you have provided invalid input"})
return
}
c.JSON(http.StatusCreated, gin.H{"message": "project has been created", "projectId": createProjectId})
})
projectsApi.GET("/", func(c *gin.Context) {
userId, _ := c.Get("userId")
projectsArr, err := ps.Get(c.Request.Context(), userId.(int))
if err != nil {
l.Warn(err.Error())
return
}
type GetProject struct {
Id int `json:"id" binding:"required"`
Name string `json:"name" binding:"required"`
MemberIds []int `json:"memberIds" binding:"required"`
AdminIds []int `json:"adminIds" binding:"required"`
}
getProject := make([]GetProject, 0)
for _, p := range projectsArr {
getProject = append(getProject, GetProject{
Id: p.Id,
Name: p.Name,
MemberIds: p.MemberIds,
AdminIds: p.AdminIds,
})
}
c.JSON(http.StatusOK, getProject)
})
containers := r.Group("/containers", BasicAuthMiddleware(l, us))
containers.GET("/", func(c *gin.Context) {
type container struct {
@@ -141,7 +189,7 @@ func setupCache(l *zap.Logger) *cache.Cache {
l.Info("Setting up cache")
ristrettoCache, err := ristretto.NewCache(&ristretto.Config{
NumCounters: 1000,
MaxCost: 100,
MaxCost: 100_000_000,
BufferItems: 64,
})
if err != nil {
@@ -188,6 +236,8 @@ func main() {
database := db.NewClient(logger)
usersRepository := postgres.NewUsersRepository(database)
usersService := users.NewService(logger, usersRepository, cacheM)
projectsRepository := postgres.NewProjectsRepository(database)
projectsService := projects.NewService(logger, projectsRepository, cacheM)
setupApi(logger, cacheM, usersService)
setupApi(logger, cacheM, usersService, projectsService)
}