firts commit

This commit is contained in:
Dmitriy Bondarenko 2025-03-27 18:18:48 +00:00
parent 34cd1dd41e
commit dbfca23691
12 changed files with 191 additions and 0 deletions

1
.gitignore vendored
View File

@ -21,3 +21,4 @@
# Go workspace file
go.work
.env

24
.gitignore copy Normal file
View File

@ -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

5
README copy.md Normal file
View File

@ -0,0 +1,5 @@
# track-company
[Задание](Task15.md)

14
Task15.md Normal file
View File

@ -0,0 +1,14 @@
# ВАРИАНТ 15
## БД «Транспортная компания»
Описание предметной области.
БД создается для информационного обслуживания сотрудников компании. Компания предоставляет услуги по доставке грузов воздушным, речным, морским путем, по железной дороге или автомобилем по различным маршрутам.
Готовые запросы:
Выдавать список маршрутов, обслуживаемых компанией и цену на них;
Выдавать список транспорта, занятого на данном маршруте;
Выдавать список вариантов проезда по данному маршруту (морской и т.д.);
Рассчитывать стоимость услуг, оказанных по перевозке данного груза. Постоянным клиентам предоставляется скидка.
Показывать грузооборот по данному маршруту.

13
cmd/api/main.go Normal file
View File

@ -0,0 +1,13 @@
package main
import (
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
http.ListenAndServe(":8080", r)
}

61
database/init/00init.sql Normal file
View File

@ -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');

View File

@ -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);

0
deployments/dockerfile Normal file
View File

22
docker-compose.yml Normal file
View File

@ -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

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module track-company
go 1.22.2
require github.com/gorilla/mux v1.8.1

2
go.sum Normal file
View File

@ -0,0 +1,2 @@
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=

View File

@ -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)
}