save
This commit is contained in:
parent
102413daaf
commit
788c02761d
@ -7,9 +7,9 @@ CREATE DATABASE tasks;
|
||||
CREATE SCHEMA task_manager;
|
||||
|
||||
|
||||
CREATE TABLE "user" (
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"login" TEXT NOT NULL,
|
||||
CREATE TABLE task_manager.user(
|
||||
"id" SERIAL PRIMARY KEY UNIQUE,
|
||||
"login" TEXT NOT NULL UNIQUE,
|
||||
"password" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL
|
||||
"email" TEXT NOT NULL UNIQUE
|
||||
);
|
@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
CREATE TABLE task_manager.project (
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"id" SERIAL PRIMARY KEY UNIQUE,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL,
|
||||
"date" TEXT NOT NULL
|
||||
@ -13,6 +13,6 @@ CREATE TABLE task_manager.user_project (
|
||||
"users" INTEGER NOT NULL,
|
||||
"projects" INTEGER NOT NULL,
|
||||
PRIMARY KEY ("users", "projects"),
|
||||
FOREIGN KEY ("projects") REFERENCES "project" ("id") ON DELETE CASCADE,
|
||||
FOREIGN KEY ("users") REFERENCES "user" ("id") ON DELETE CASCADE
|
||||
FOREIGN KEY ("projects") REFERENCES task_manager.project ("id") ON DELETE CASCADE,
|
||||
FOREIGN KEY ("users") REFERENCES task_manager.user ("id") ON DELETE CASCADE
|
||||
);
|
||||
|
@ -2,9 +2,9 @@
|
||||
\connect tasks;
|
||||
|
||||
CREATE TABLE task_manager.sprint(
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"id" SERIAL PRIMARY KEY UNIQUE,
|
||||
"id_project" INTEGER NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL UNIQUE,
|
||||
"description" TEXT NOT NULL,
|
||||
"date" TEXT NOT NULL,
|
||||
"duration" INTEGER,
|
||||
|
@ -4,7 +4,7 @@
|
||||
CREATE TYPE task_manager.task_status AS ENUM('todo','in_progress','paused','test','review','done');
|
||||
|
||||
CREATE TABLE task_manager.task(
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"id" SERIAL PRIMARY KEY UNIQUE,
|
||||
"id_sprint" INTEGER NOT NULL,
|
||||
"id_user" INTEGER,
|
||||
"id_project" INTEGER NOT NULL,
|
||||
@ -13,7 +13,7 @@ CREATE TABLE task_manager.task(
|
||||
"date_start" DATE DEFAULT now(),
|
||||
"duration" INTEGER,
|
||||
"status" task_manager.task_status DEFAULT 'todo',
|
||||
FOREIGN KEY (id_user) REFERENCES task_manager.users(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (id_user) REFERENCES task_manager.user(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (id_sprint) REFERENCES task_manager.sprint(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (id_project) REFERENCES task_manager.project(id) ON DELETE CASCADE
|
||||
);
|
@ -1,7 +1,7 @@
|
||||
version: '3'
|
||||
services:
|
||||
tasks-postgres:
|
||||
image: postgres:13
|
||||
image: docker.io/postgres:13
|
||||
name: tasks-postgres
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
|
1
go.sum
1
go.sum
@ -1,3 +1,4 @@
|
||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
|
@ -1,14 +1,50 @@
|
||||
package app
|
||||
|
||||
|
||||
import (
|
||||
|
||||
"net/http"
|
||||
|
||||
gorilla "github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
const (
|
||||
api_version string = "/api/v1"
|
||||
)
|
||||
|
||||
type ErrorResponse struct {
|
||||
Code int `json:"code"` // Http code
|
||||
Message string `json:"message"` // Обычный текст ошибки
|
||||
Error string `json:"error"` // Машинный текст ошибки
|
||||
}
|
||||
|
||||
func (rm *TaskManager) RegisterRoutes(router *gorilla.Router) {
|
||||
|
||||
}
|
||||
|
||||
router.HandleFunc(api_version+"/user/login", rm.handleLogin).Methods(http.MethodPost)
|
||||
router.HandleFunc(api_version+"/user/register", rm.handleRegistrateUser).Methods(http.MethodPost)
|
||||
router.HandleFunc(api_version+"/user/tasks", rm.handleUserTasks).Methods(http.MethodGet)
|
||||
router.HandleFunc(api_version+"/user/projects", rm.handleUserProjects).Methods(http.MethodGet)
|
||||
router.HandleFunc(api_version+"/user/projects", rm.handleAssignUserToProject).Methods(http.MethodPost)
|
||||
|
||||
router.HandleFunc(api_version+"/projects", rm.handleCreateProject).Methods(http.MethodPost)
|
||||
router.HandleFunc(api_version+"/projects", rm.handleGetProjects).Methods(http.MethodGet)
|
||||
|
||||
router.HandleFunc(api_version+"/projects/tasks", rm.handleCreateTask).Methods(http.MethodPost)
|
||||
router.HandleFunc(api_version+"/projects/tasks/{task_id}", rm.handleUpdateTask).Methods(http.MethodPatch)
|
||||
|
||||
router.HandleFunc(api_version+"/projects/sprints", rm.handleCreateSprint).Methods(http.MethodPost)
|
||||
router.HandleFunc(api_version+"/projects/users", rm.handleGetProjectUsers).Methods(http.MethodGet)
|
||||
|
||||
}
|
||||
|
||||
func (rm *TaskManager) handleLogin(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleRegistrateUser(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleUserTasks(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleUserProjects(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleAssignUserToProject(w http.ResponseWriter, r *http.Request) {}
|
||||
|
||||
func (rm *TaskManager) handleCreateProject(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleCreateTask(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleCreateSprint(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleGetProjectUsers(w http.ResponseWriter, r *http.Request) {}
|
||||
|
||||
func (rm *TaskManager) handleUpdateTask(w http.ResponseWriter, r *http.Request) {}
|
||||
func (rm *TaskManager) handleGetProjects(w http.ResponseWriter, r *http.Request) {}
|
||||
|
@ -4,11 +4,10 @@ import (
|
||||
"task_manager/internal/persistance"
|
||||
)
|
||||
|
||||
|
||||
type TaskManager {
|
||||
type TaskManager struct {
|
||||
repo *persistance.TaskManagerRepository
|
||||
}
|
||||
|
||||
func NewTaskManager(newRepo *persistance.TaskManagerRepository) *TaskManager {
|
||||
return &TaskManager{repo: newRepo}
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
package project
|
||||
|
||||
import "task_manager/internal/domain/stprint"
|
||||
import "task_manager/internal/domain/sprint"
|
||||
|
||||
type Project struct {
|
||||
Id int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Date string `json:"date"`
|
||||
Sprints []stprint.Sprint
|
||||
Sprints []sprint.Sprint
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package sprint
|
||||
|
||||
import "task_manager/internal/domain/task"
|
||||
import "task_manager/internal/domain/tasks"
|
||||
|
||||
type Sprint struct {
|
||||
Id int `json:"id"`
|
||||
@ -9,5 +9,5 @@ type Sprint struct {
|
||||
Description string `json:"description"`
|
||||
Date string `json:"date"`
|
||||
Duration int `json:"duration"`
|
||||
Tasks []task.Task
|
||||
Tasks []tasks.Task
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
package tasks
|
||||
|
||||
type Task struct {
|
||||
Id int `json:"id"`
|
||||
IdUser int `json:"id_user"`
|
||||
IdSprint int `json:"id_sprint"`
|
||||
IdProject int `json:"id_project"`
|
||||
Name string `json:"title"`
|
||||
Description string `json:"desrciption"`
|
||||
DateStart string `jsong:"date_start"`
|
||||
Status string `json:"status"`
|
||||
Duration int `json:"duration"`
|
||||
Id int `json:"id"`
|
||||
IdUser *int `json:"id_user"`
|
||||
IdSprint *int `json:"id_sprint"`
|
||||
IdProject int `json:"id_project"`
|
||||
Title string `json:"title"`
|
||||
Description *string `json:"desrciption"`
|
||||
DateStart string `jsong:"date_start"`
|
||||
Status string `json:"status"`
|
||||
Duration *int `json:"duration"`
|
||||
}
|
||||
|
@ -6,5 +6,6 @@ type User struct {
|
||||
Id int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Password string `json:"password"`
|
||||
Email string `json:"email"`
|
||||
Projects []project.Project
|
||||
}
|
||||
|
@ -8,7 +8,16 @@ import (
|
||||
)
|
||||
|
||||
func (tm *TaskManagerRepository) AddTask(task tasks.Task) error {
|
||||
err := tm.db.QueryRow("INSERT INTO task_manager.tasks(name, description) VALUES($1,$2) RETURNING id", task.Name, task.Description).Scan(&task.Id)
|
||||
err := tm.db.QueryRow(`INSERT INTO task_manager.tasks(id_sprint,id_user,id_project,title,description,duration,status)
|
||||
VALUES($1,$2,$3,$4,$5,$6,$7)
|
||||
RETURNING id`,
|
||||
task.IdSprint,
|
||||
task.IdUser,
|
||||
task.IdProject,
|
||||
task.Title,
|
||||
task.Description,
|
||||
task.Duration,
|
||||
task.Status).Scan(&task.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -16,7 +25,12 @@ func (tm *TaskManagerRepository) AddTask(task tasks.Task) error {
|
||||
}
|
||||
|
||||
func (tm *TaskManagerRepository) UpdateTask(task tasks.Task) error {
|
||||
_, err := tm.db.Exec("UPDATE task_manager.tasks SET name=$1, description=$2, id_user=$3, status=$4 WHERE id=$3", task.Name, task.Description, task.IdUser, task.Status)
|
||||
_, err := tm.db.Exec(`UPDATE task_manager.tasks
|
||||
SET name=$1,
|
||||
description=$2,
|
||||
id_user=$3,
|
||||
status=$4
|
||||
WHERE id=$3`, task.Title, task.Description, task.IdUser, task.Status)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -33,8 +47,16 @@ func (tm *TaskManagerRepository) DeleteTask(task tasks.Task) error {
|
||||
|
||||
func (tm *TaskManagerRepository) GetTask(id int) (*tasks.Task, error) {
|
||||
task := tasks.Task{}
|
||||
row := tm.db.QueryRow("SELECT (id,id_user,name,description,status,creation_date,update_date) FROM task_manager.tasks WHERE id=$1", id)
|
||||
err := row.Scan(task.Id, task.IdUser, task.Name, task.Description, task.Status, task.CreationDate, task.UpdateDate)
|
||||
row := tm.db.QueryRow("SELECT (id,id_sprint,id_user,id_project,title,description,date_start,duration,status) FROM task_manager.tasks WHERE id=$1", id)
|
||||
err := row.Scan(&task.Id,
|
||||
&task.IdSprint,
|
||||
&task.IdUser,
|
||||
&task.IdProject,
|
||||
&task.Title,
|
||||
&task.Description,
|
||||
&task.DateStart,
|
||||
&task.Duration,
|
||||
&task.Status)
|
||||
if err != nil {
|
||||
log.Println("Ошибка получения пользователя:", err)
|
||||
return nil, err
|
||||
@ -55,11 +77,10 @@ func (tm *TaskManagerRepository) GetUserTasks(id_user int) ([]tasks.Task, error)
|
||||
task := tasks.Task{}
|
||||
err = rows.Scan(&task.Id,
|
||||
&task.IdUser,
|
||||
&task.Name,
|
||||
&task.Title,
|
||||
&task.Description,
|
||||
&task.Status,
|
||||
&task.CreationDate,
|
||||
&task.UpdateDate,
|
||||
&task.DateStart,
|
||||
)
|
||||
if err != nil {
|
||||
return user_tasks, err
|
||||
|
@ -8,7 +8,10 @@ import (
|
||||
)
|
||||
|
||||
func (tm *TaskManagerRepository) AddUser(user *users.User) error {
|
||||
err := tm.db.QueryRow("INSERT INTO task_manager.users(name, password) VALUES($1,$2) RETURNING id", user.Name, GetMD5Hash(user.Password)).Scan(&user.Id)
|
||||
err := tm.db.QueryRow("INSERT INTO task_manager.users(name, password, email) VALUES($1,$2,$3) RETURNING id",
|
||||
user.Name,
|
||||
GetMD5Hash(user.Password),
|
||||
user.Email).Scan(&user.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -33,8 +36,8 @@ func (tm *TaskManagerRepository) UpdateUser(user *users.User) error {
|
||||
|
||||
func (tm *TaskManagerRepository) GetUser(user_name string) (*users.User, error) {
|
||||
user := users.User{}
|
||||
row := tm.db.QueryRow("SELECT (id,name,password) FROM task_manager.users WHERE name=$1", user_name)
|
||||
err := row.Scan(user.Id, user.Name, user.Password)
|
||||
row := tm.db.QueryRow("SELECT (id,name,password,email) FROM task_manager.users WHERE name=$1", user_name)
|
||||
err := row.Scan(&user.Id, &user.Name, &user.Password, &user.Email)
|
||||
if err != nil {
|
||||
log.Println("Ошибка получения пользователя:", err)
|
||||
return nil, err
|
||||
|
Loading…
Reference in New Issue
Block a user