mirror of
https://github.com/simon987/task_tracker.git
synced 2025-12-10 21:48:52 +00:00
Task GET
This commit is contained in:
17
api/main.go
17
api/main.go
@@ -9,18 +9,18 @@ import (
|
||||
)
|
||||
|
||||
type WebAPI struct {
|
||||
server *fasthttp.Server
|
||||
router *fasthttprouter.Router
|
||||
server *fasthttp.Server
|
||||
router *fasthttprouter.Router
|
||||
Database *storage.Database
|
||||
}
|
||||
|
||||
type Info struct {
|
||||
Name string `json:"name"`
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
}
|
||||
|
||||
var info = Info {
|
||||
Name: "task_tracker",
|
||||
var info = Info{
|
||||
Name: "task_tracker",
|
||||
Version: "1.0",
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ func New() *WebAPI {
|
||||
|
||||
api.server = &fasthttp.Server{
|
||||
Handler: api.router.Handler,
|
||||
Name: info.Name,
|
||||
Name: info.Name,
|
||||
}
|
||||
|
||||
api.router.GET("/", LogRequest(Index))
|
||||
@@ -55,7 +55,8 @@ func New() *WebAPI {
|
||||
api.router.GET("/project/get/:id", LogRequest(api.ProjectGet))
|
||||
|
||||
api.router.POST("/task/create", LogRequest(api.TaskCreate))
|
||||
api.router.GET("/task/get/", LogRequest(api.TaskGet))
|
||||
api.router.GET("/task/get/:project", LogRequest(api.TaskGetFromProject))
|
||||
api.router.GET("/task/get", LogRequest(api.TaskGet))
|
||||
|
||||
return api
|
||||
}
|
||||
@@ -68,4 +69,4 @@ func (api *WebAPI) Run() {
|
||||
if err != nil {
|
||||
logrus.Fatalf("Error in ListenAndServe: %s", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,20 +7,21 @@ import (
|
||||
)
|
||||
|
||||
type CreateProjectRequest struct {
|
||||
Name string `json:"name"`
|
||||
GitUrl string `json:"git_url"`
|
||||
Version string `json:"version"`
|
||||
Name string `json:"name"`
|
||||
GitUrl string `json:"git_url"`
|
||||
Version string `json:"version"`
|
||||
Priority int64 `json:"priority"`
|
||||
}
|
||||
|
||||
type CreateProjectResponse struct {
|
||||
Ok bool `json:"ok"`
|
||||
Id int64 `json:"id,omitempty"`
|
||||
Ok bool `json:"ok"`
|
||||
Id int64 `json:"id,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
}
|
||||
|
||||
type GetProjectResponse struct {
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Project *storage.Project `json:"project,omitempty"`
|
||||
}
|
||||
|
||||
@@ -30,9 +31,10 @@ func (api *WebAPI) ProjectCreate(r *Request) {
|
||||
if r.GetJson(createReq) {
|
||||
|
||||
project := &storage.Project{
|
||||
Name: createReq.Name,
|
||||
Version: createReq.Version,
|
||||
GitUrl: createReq.GitUrl,
|
||||
Name: createReq.Name,
|
||||
Version: createReq.Version,
|
||||
GitUrl: createReq.GitUrl,
|
||||
Priority: createReq.Priority,
|
||||
}
|
||||
|
||||
if isValidProject(project) {
|
||||
@@ -40,8 +42,8 @@ func (api *WebAPI) ProjectCreate(r *Request) {
|
||||
|
||||
if err != nil {
|
||||
r.Json(CreateProjectResponse{
|
||||
Ok: false,
|
||||
Message:err.Error(),
|
||||
Ok: false,
|
||||
Message: err.Error(),
|
||||
}, 500)
|
||||
} else {
|
||||
r.OkJson(CreateProjectResponse{
|
||||
@@ -55,7 +57,7 @@ func (api *WebAPI) ProjectCreate(r *Request) {
|
||||
}).Warn("Invalid project")
|
||||
|
||||
r.Json(CreateProjectResponse{
|
||||
Ok: false,
|
||||
Ok: false,
|
||||
Message: "Invalid project",
|
||||
}, 400)
|
||||
}
|
||||
@@ -80,13 +82,13 @@ func (api *WebAPI) ProjectGet(r *Request) {
|
||||
|
||||
if project != nil {
|
||||
r.OkJson(GetProjectResponse{
|
||||
Ok: true,
|
||||
Project:project,
|
||||
Ok: true,
|
||||
Project: project,
|
||||
})
|
||||
} else {
|
||||
r.Json(GetProjectResponse{
|
||||
Ok: false,
|
||||
Ok: false,
|
||||
Message: "Project not found",
|
||||
}, 404)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
96
api/task.go
96
api/task.go
@@ -1,19 +1,29 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/google/uuid"
|
||||
"src/task_tracker/storage"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type CreateTaskRequest struct {
|
||||
Project int64 `json:"project"`
|
||||
MaxRetries int64 `json:"max_retries"`
|
||||
Recipe string `json:"recipe"`
|
||||
Project int64 `json:"project"`
|
||||
MaxRetries int64 `json:"max_retries"`
|
||||
Recipe string `json:"recipe"`
|
||||
Priority int64 `json:"priority"`
|
||||
}
|
||||
|
||||
type CreateTaskResponse struct {
|
||||
Ok bool
|
||||
Message string
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
}
|
||||
|
||||
type GetTaskResponse struct {
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Task *storage.Task `json:"task,omitempty"`
|
||||
}
|
||||
|
||||
func (api *WebAPI) TaskCreate(r *Request) {
|
||||
@@ -22,17 +32,17 @@ func (api *WebAPI) TaskCreate(r *Request) {
|
||||
if r.GetJson(&createReq) {
|
||||
|
||||
task := &storage.Task{
|
||||
Project:createReq.Project,
|
||||
MaxRetries: createReq.MaxRetries,
|
||||
Recipe:createReq.Recipe,
|
||||
Recipe: createReq.Recipe,
|
||||
Priority: createReq.Priority,
|
||||
}
|
||||
|
||||
if isTaskValid(task) {
|
||||
err := api.Database.SaveTask(task)
|
||||
err := api.Database.SaveTask(task, createReq.Project)
|
||||
|
||||
if err != nil {
|
||||
r.Json(CreateTaskResponse{
|
||||
Ok: false,
|
||||
Ok: false,
|
||||
Message: err.Error(), //todo: hide sensitive error?
|
||||
}, 500)
|
||||
} else {
|
||||
@@ -45,11 +55,10 @@ func (api *WebAPI) TaskCreate(r *Request) {
|
||||
"task": task,
|
||||
}).Warn("Invalid task")
|
||||
r.Json(CreateTaskResponse{
|
||||
Ok: false,
|
||||
Ok: false,
|
||||
Message: "Invalid task",
|
||||
}, 400)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,9 +66,6 @@ func isTaskValid(task *storage.Task) bool {
|
||||
if task.MaxRetries < 0 {
|
||||
return false
|
||||
}
|
||||
if task.Project <= 0 {
|
||||
return false
|
||||
}
|
||||
if len(task.Recipe) <= 0 {
|
||||
return false
|
||||
}
|
||||
@@ -67,7 +73,67 @@ func isTaskValid(task *storage.Task) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (api *WebAPI) TaskGetFromProject(r *Request) {
|
||||
|
||||
worker, err := api.workerFromQueryArgs(r)
|
||||
if err != nil {
|
||||
r.Json(GetTaskResponse{
|
||||
Ok: false,
|
||||
Message: err.Error(),
|
||||
}, 403)
|
||||
return
|
||||
}
|
||||
|
||||
project, err := strconv.Atoi(r.Ctx.UserValue("project").(string))
|
||||
handleErr(err, r)
|
||||
task := api.Database.GetTaskFromProject(worker, int64(project))
|
||||
|
||||
r.OkJson(GetTaskResponse{
|
||||
Ok: true,
|
||||
Task: task,
|
||||
})
|
||||
}
|
||||
|
||||
func (api *WebAPI) TaskGet(r *Request) {
|
||||
|
||||
worker, err := api.workerFromQueryArgs(r)
|
||||
if err != nil {
|
||||
r.Json(GetTaskResponse{
|
||||
Ok: false,
|
||||
Message: err.Error(),
|
||||
}, 403)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
task := api.Database.GetTask(worker)
|
||||
|
||||
r.OkJson(GetTaskResponse{
|
||||
Ok: true,
|
||||
Task: task,
|
||||
})
|
||||
}
|
||||
|
||||
func (api WebAPI) workerFromQueryArgs(r *Request) (*storage.Worker, error) {
|
||||
|
||||
widStr := string(r.Ctx.QueryArgs().Peek("wid"))
|
||||
wid, err := uuid.Parse(widStr)
|
||||
if err != nil {
|
||||
logrus.WithError(err).WithFields(logrus.Fields{
|
||||
"wid": widStr,
|
||||
}).Warn("Can't parse wid")
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
worker := api.Database.GetWorker(wid)
|
||||
|
||||
if worker == nil {
|
||||
logrus.WithError(err).WithFields(logrus.Fields{
|
||||
"wid": widStr,
|
||||
}).Warn("Can't parse wid")
|
||||
|
||||
return nil, errors.New("worker id does not match any valid worker")
|
||||
}
|
||||
|
||||
return worker, nil
|
||||
}
|
||||
|
||||
@@ -11,15 +11,15 @@ type CreateWorkerRequest struct {
|
||||
}
|
||||
|
||||
type CreateWorkerResponse struct {
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
WorkerId string `json:"id,omitempty"`
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
WorkerId uuid.UUID `json:"id,omitempty"`
|
||||
}
|
||||
|
||||
type GetWorkerResponse struct {
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Worker *storage.Worker `json:"worker,omitempty"`
|
||||
Ok bool `json:"ok"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Worker *storage.Worker `json:"worker,omitempty"`
|
||||
}
|
||||
|
||||
func (api *WebAPI) WorkerCreate(r *Request) {
|
||||
@@ -35,8 +35,8 @@ func (api *WebAPI) WorkerCreate(r *Request) {
|
||||
handleErr(err, r)
|
||||
} else {
|
||||
r.OkJson(CreateWorkerResponse{
|
||||
Ok: true,
|
||||
WorkerId: id.String(),
|
||||
Ok: true,
|
||||
WorkerId: id,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -58,8 +58,8 @@ func (api *WebAPI) WorkerGet(r *Request) {
|
||||
}).Warn("Invalid UUID")
|
||||
|
||||
r.Json(GetWorkerResponse{
|
||||
Ok: false,
|
||||
Message:err.Error(),
|
||||
Ok: false,
|
||||
Message: err.Error(),
|
||||
}, 400)
|
||||
return
|
||||
}
|
||||
@@ -68,13 +68,13 @@ func (api *WebAPI) WorkerGet(r *Request) {
|
||||
|
||||
if worker != nil {
|
||||
r.OkJson(GetWorkerResponse{
|
||||
Ok: true,
|
||||
Worker:worker,
|
||||
Ok: true,
|
||||
Worker: worker,
|
||||
})
|
||||
} else {
|
||||
r.Json(GetWorkerResponse{
|
||||
Ok: false,
|
||||
Message:"Worker not found",
|
||||
Ok: false,
|
||||
Message: "Worker not found",
|
||||
}, 404)
|
||||
}
|
||||
}
|
||||
@@ -83,7 +83,7 @@ func (api *WebAPI) workerCreate(request *CreateWorkerRequest, identity *storage.
|
||||
|
||||
worker := storage.Worker{
|
||||
Id: uuid.New(),
|
||||
Created: time.Now().Unix(),
|
||||
Created: time.Now().Unix(),
|
||||
Identity: identity,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user