save
This commit is contained in:
commit
506106fc5a
7
cmd/main.go
Normal file
7
cmd/main.go
Normal file
@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hello")
|
||||
}
|
14
database/init/00-users-init.sql
Normal file
14
database/init/00-users-init.sql
Normal file
@ -0,0 +1,14 @@
|
||||
-- создаем базу данных задач
|
||||
CREATE DATABASE tasks;
|
||||
|
||||
-- подключаемся к базе данных
|
||||
\connect tasks
|
||||
|
||||
CREATE SCHEMA task_manager;
|
||||
|
||||
CREATE TABLE task_manager.users(
|
||||
id serial PRIMARY KEY NOT NULL UNIQUE,
|
||||
login TEXT NOT NULL UNIQUE,
|
||||
password TEXT NOT NULL
|
||||
);
|
||||
|
15
database/init/01-tasks-init.sql
Normal file
15
database/init/01-tasks-init.sql
Normal file
@ -0,0 +1,15 @@
|
||||
-- подключаемся к базе данных
|
||||
\connect tasks;
|
||||
|
||||
CREATE TYPE task_manager.task_status AS ENUM('todo','in_progress','paused','test','review','done');
|
||||
|
||||
CREATE TABLE IF NOT EXISTS task_manager.tasks(
|
||||
id serial PRIMARY KEY NOT NULL UNIQUE,
|
||||
id_user integer,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
status task_manager.task_status NOT NULL default 'todo',
|
||||
creation_date date NOT NULL default Now(),
|
||||
update_date date NOT NULL default Now(),
|
||||
FOREIGN KEY (id_user) REFERENCES task_manager.users (id) ON DELETE CASCADE
|
||||
);
|
14
deployments/task-manager.yaml
Normal file
14
deployments/task-manager.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
version: '3'
|
||||
services:
|
||||
tasks-postgres:
|
||||
image: postgres:13
|
||||
name: tasks-postgres
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
ports:
|
||||
5432:5432
|
||||
volumes:
|
||||
- ../database/init:/docker-entrypoint-initdb.d
|
||||
|
||||
|
8
go.mod
Normal file
8
go.mod
Normal file
@ -0,0 +1,8 @@
|
||||
module task_manager
|
||||
|
||||
go 1.24
|
||||
|
||||
require (
|
||||
github.com/go-chi/chi/v5 v5.2.1 // indirect
|
||||
github.com/lib/pq v1.10.9 // indirect
|
||||
)
|
4
go.sum
Normal file
4
go.sum
Normal file
@ -0,0 +1,4 @@
|
||||
github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8=
|
||||
github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
|
||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
5
internal/config/config.go
Normal file
5
internal/config/config.go
Normal file
@ -0,0 +1,5 @@
|
||||
package config
|
||||
|
||||
const (
|
||||
CONNECTION_STRING = "postgres://postgres:postgres@localhost:5432/tasks"
|
||||
)
|
11
internal/domain/tasks/task.go
Normal file
11
internal/domain/tasks/task.go
Normal file
@ -0,0 +1,11 @@
|
||||
package tasks
|
||||
|
||||
type Task struct {
|
||||
Id int `json:"id"`
|
||||
IdUser int `json:"id_user"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"desrciption"`
|
||||
Status string `json:"status"`
|
||||
CreationDate string `json:"creation_date"`
|
||||
UpdateDate string `json:"update_date"`
|
||||
}
|
10
internal/domain/users/user.go
Normal file
10
internal/domain/users/user.go
Normal file
@ -0,0 +1,10 @@
|
||||
package users
|
||||
|
||||
import "task_manager/internal/domain/tasks"
|
||||
|
||||
type User struct {
|
||||
Id int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Password string `json:"password"`
|
||||
Tasks []tasks.Task
|
||||
}
|
20
internal/persistance/task_manager.go
Normal file
20
internal/persistance/task_manager.go
Normal file
@ -0,0 +1,20 @@
|
||||
package persistance
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"database/sql"
|
||||
"encoding/hex"
|
||||
)
|
||||
|
||||
type TaskManager struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
func NewTaskManager(db *sql.DB) *TaskManager {
|
||||
return &TaskManager{db: db}
|
||||
}
|
||||
|
||||
func GetMD5Hash(text string) string {
|
||||
hash := md5.Sum([]byte(text))
|
||||
return hex.EncodeToString(hash[:])
|
||||
}
|
71
internal/persistance/task_repository.go
Normal file
71
internal/persistance/task_repository.go
Normal file
@ -0,0 +1,71 @@
|
||||
package persistance
|
||||
|
||||
import (
|
||||
"log"
|
||||
"task_manager/internal/domain/tasks"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
func (tm *TaskManager) 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)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tm *TaskManager) 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)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tm *TaskManager) DeleteTask(task tasks.Task) error {
|
||||
_, err := tm.db.Exec("DELETE FROM task_manager.tasks WHERE id=$1", task.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tm *TaskManager) 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)
|
||||
if err != nil {
|
||||
log.Println("Ошибка получения пользователя:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &task, nil
|
||||
}
|
||||
|
||||
func (tm *TaskManager) GetUserTasks(id_user int) ([]tasks.Task, error) {
|
||||
user_tasks := []tasks.Task{}
|
||||
|
||||
rows, err := tm.db.Query("SELECT (id,id_user,name,description,status,creation_date,update_date) FROM task_manager.tasks WHERE id_user=$1", id_user)
|
||||
if err != nil {
|
||||
return user_tasks, err
|
||||
}
|
||||
|
||||
for rows.Next() {
|
||||
task := tasks.Task{}
|
||||
err = rows.Scan(&task.Id,
|
||||
&task.IdUser,
|
||||
&task.Name,
|
||||
&task.Description,
|
||||
&task.Status,
|
||||
&task.CreationDate,
|
||||
&task.UpdateDate,
|
||||
)
|
||||
if err != nil {
|
||||
return user_tasks, err
|
||||
}
|
||||
user_tasks = append(user_tasks, task)
|
||||
}
|
||||
|
||||
return user_tasks, nil
|
||||
}
|
44
internal/persistance/user_repository.go
Normal file
44
internal/persistance/user_repository.go
Normal file
@ -0,0 +1,44 @@
|
||||
package persistance
|
||||
|
||||
import (
|
||||
"log"
|
||||
"task_manager/internal/domain/users"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
func (tm *TaskManager) 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)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tm *TaskManager) DeleteUser(user *users.User) error {
|
||||
_, err := tm.db.Exec("DELETE FROM task_manager.users WHERE name=$1", user.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tm *TaskManager) UpdateUser(user *users.User) error {
|
||||
_, err := tm.db.Exec("UPDATE task_manager.users SET name=$1, password=$2 WHERE id=$3", user.Name, user.Password, user.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tm *TaskManager) 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)
|
||||
if err != nil {
|
||||
log.Println("Ошибка получения пользователя:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &user, nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user