diff --git a/.gitignore b/.gitignore index adf8f72..d43a39d 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ # Go workspace file go.work +.env diff --git a/.gitignore copy b/.gitignore copy new file mode 100644 index 0000000..2cd71b7 --- /dev/null +++ b/.gitignore copy @@ -0,0 +1,24 @@ +# ---> Go +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib +.env + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + diff --git a/README copy.md b/README copy.md new file mode 100644 index 0000000..b747864 --- /dev/null +++ b/README copy.md @@ -0,0 +1,5 @@ +# track-company + + + +[Задание](Task15.md) \ No newline at end of file diff --git a/Task15.md b/Task15.md new file mode 100644 index 0000000..0dc1ee7 --- /dev/null +++ b/Task15.md @@ -0,0 +1,14 @@ +# ВАРИАНТ 15 + +## БД «Транспортная компания» + +Описание предметной области. + + БД создается для информационного обслуживания сотрудников компании. Компания предоставляет услуги по доставке грузов воздушным, речным, морским путем, по железной дороге или автомобилем по различным маршрутам. +Готовые запросы: +Выдавать список маршрутов, обслуживаемых компанией и цену на них; +Выдавать список транспорта, занятого на данном маршруте; +Выдавать список вариантов проезда по данному маршруту (морской и т.д.); +Рассчитывать стоимость услуг, оказанных по перевозке данного груза. Постоянным клиентам предоставляется скидка. +Показывать грузооборот по данному маршруту. + diff --git a/cmd/api/main.go b/cmd/api/main.go new file mode 100644 index 0000000..e1a7017 --- /dev/null +++ b/cmd/api/main.go @@ -0,0 +1,13 @@ +package main + +import ( + "net/http" + + "github.com/gorilla/mux" +) + +func main() { + r := mux.NewRouter() + + http.ListenAndServe(":8080", r) +} diff --git a/database/init/00init.sql b/database/init/00init.sql new file mode 100644 index 0000000..5a8876e --- /dev/null +++ b/database/init/00init.sql @@ -0,0 +1,61 @@ +-- Сначала создадим базу данных +CREATE DATABASE transport_company; + +-- Переключаемся на базу данных +\c transport_company; + +-- Таблица для водителей +CREATE TABLE drivers ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL, + license_number VARCHAR(50) UNIQUE NOT NULL, + phone VARCHAR(15), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Таблица для автомобилей +CREATE TABLE vehicles ( + id SERIAL PRIMARY KEY, + license_plate VARCHAR(20) UNIQUE NOT NULL, + model VARCHAR(50), + year INT, + driver_id INT REFERENCES drivers(id) ON DELETE CASCADE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Таблица для маршрутов +CREATE TABLE routes ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL, + start_location VARCHAR(100), + end_location VARCHAR(100), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Таблица для поездок +CREATE TABLE trips ( + id SERIAL PRIMARY KEY, + vehicle_id INT REFERENCES vehicles(id) ON DELETE CASCADE, + route_id INT REFERENCES routes(id) ON DELETE CASCADE, + driver_id INT REFERENCES drivers(id) ON DELETE CASCADE, + trip_date TIMESTAMP NOT NULL, + status VARCHAR(20) CHECK (status IN ('scheduled', 'completed', 'canceled')), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Пример заполнения начальных данных +INSERT INTO drivers (name, license_number, phone) VALUES +('Иван Петров', 'A1234567', '123456789'), +('Мария Иванова', 'B7654321', '987654321'); + +INSERT INTO vehicles (license_plate, model, year, driver_id) VALUES +('ABC123', 'Toyota Camry', 2019, 1), +('XYZ789', 'Honda Accord', 2020, 2); + +INSERT INTO routes (name, start_location, end_location) VALUES +('Маршрут 1', 'Москва', 'Санкт-Петербург'), +('Маршрут 2', 'Казань', 'Екатеринбург'); + +INSERT INTO trips (vehicle_id, route_id, driver_id, trip_date, status) VALUES +(1, 1, 1, '2024-07-01 08:00:00', 'scheduled'), +(2, 2, 2, '2024-07-02 09:00:00', 'completed'); \ No newline at end of file diff --git a/database/init/01insert.sql b/database/init/01insert.sql new file mode 100644 index 0000000..710dd1f --- /dev/null +++ b/database/init/01insert.sql @@ -0,0 +1,23 @@ +INSERT INTO Clients (name, email, is_regular) VALUES +('Иван Иванов', 'ivan@example.com', TRUE), +('Петр Петров', 'petr@example.com', FALSE); + +INSERT INTO Routes (name, start_point, end_point, price) VALUES +('Москва - Санкт-Петербург', 'Москва', 'Санкт-Петербург', 5000.00), +('Новосибирск - Владивосток', 'Новосибирск', 'Владивосток', 10000.00); + +INSERT INTO Transport (type, capacity, status) VALUES +('Воздушный', 1000.00, 'free'), +('Морской', 5000.00, 'free'); + +INSERT INTO RouteTransport (route_id, transport_id, departure_time, arrival_time) VALUES +(1, 1, '2023-10-01 10:00:00', '2023-10-01 12:00:00'), +(2, 2, '2023-10-02 08:00:00', '2023-10-02 20:00:00'); + +INSERT INTO Cargo (name, weight, route_id) VALUES +('Электроника', 200.00, 1), +('Мебель', 1000.00, 2); + +INSERT INTO Orders (client_id, cargo_id, total_cost) VALUES +(1, 1, 5000.00), +(2, 2, 10000.00); \ No newline at end of file diff --git a/deployments/dockerfile b/deployments/dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1c191f0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3.8' + +services: + db: + image: postgres:13 + container_name: postgres + + restart: always + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ports: + - "5432:5432" + volumes: + - ./init.sql:/docker-entrypoint-initdb.d/init.sql + networks: + - transport_network + +networks: + transport_network: + driver: bridge \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..368a079 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module track-company + +go 1.22.2 + +require github.com/gorilla/mux v1.8.1 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..7128337 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go new file mode 100644 index 0000000..b6ab7f0 --- /dev/null +++ b/internal/handlers/handlers.go @@ -0,0 +1,21 @@ +package handlers + +import ( + "net/http" + + "github.com/gorilla/mux" +) + +type TruckCompanyHandler struct { +} + +func NewTruckCompanyHandler() *TruckCompanyHandler { + return &TruckCompanyHandler{} +} + +func (h *TruckCompanyHandler) RegisterRoutes(router *mux.Router) { + + // router.HandleFunc("/routes").Methods(http.MethodGet) + // router.HandleFunc("").Methods(http.MethodGet) + router.HandleFunc("/", http.NotFound) +}