Легенда: В городе GoCity существует развитый рынок товаров и услуг. Жители города проявили интерес к удобному способу управления своими покупками и продажами. Для удовлетворения этой потребности было принято решение создать консольный маркетплейс под названием "GoMarket". Этот маркетплейс предоставит жителям города возможность регистрации, добавления товаров, покупок, а также управления своим аккаунтом. Наша задача - разработать приложение на языке Go, которое позволит пользователям легко управлять своими покупками и продажами через консольный интерфейс. Цель проекта: Цель проекта "GoMarket" - предоставить жителям удобный инструмент для управления и отслеживания своих покупок и продаж через консольный интерфейс. Пользователи смогут регистрироваться, добавлять товары, просматривать список товаров, совершать покупки, а также управлять своим аккаунтом. Задача: Разработать приложение на языке Go под названием "GoMarket", представляющее собой маркетплейс для управления товарами и покупками. Приложение должно обеспечивать регистрацию и авторизацию пользователей, возможность добавления, редактирования, просмотра и удаления товаров, а также выполнение покупок. Инструменты:
- Язык программирования Go: Go является основным инструментом для разработки всего приложения. Он обеспечивает эффективную работу с интерфейсом и обработку данных.
- Хранение данных: для сохранения данных о пользователях, товарах и покупках между сеансами работы приложения иcпользовать PostgreSQL.
- HTTP-фреймворк: рассмотрите использование фрейворка Gin чтобы ускорить разработку и упростить обработку маршрутов.
- Организация кода: используйте стандартные пакеты и практики организации кода в Go для обеспечения чистоты и читаемости.
- Тестирование: воспользуйтесь стандартным пакетом testing в Go для написания базовых тестов и обеспечения надежности функциональности.
- Git: используйте систему контроля версий Git для отслеживания изменений, создания веток.
- Дополнительные библиотеки: в случае необходимости, вы можете использовать дополнительные библиотеки для облегчения разработки, например, для работы с хешами паролей. Этапы проекта:
- Этап управления товарами: разработка функционала добавления, просмотра, редактирования и удаления товаров. Каждый товар должен иметь уникальный идентификатор (uuid).
- Этап покупок: внедрение возможности совершения покупок. Пользователь может указывать код товара и количество при покупке. Обновление количества товара на складе после покупки.
- Этап регистрации: разработка системы регистрации пользователей. Ввод уникального логина и пароля. Проверка уникальности логинов. (на основе регулярных выражений, пакет regexp)
- Этап авторизации: реализация механизма авторизации зарегистрированных пользователей. Возможность входа в систему с использованием логина и пароля.
- Этап улучшений и финальное тестирование: добавление дополнительных функций по желанию (например, просмотр истории покупок). Проведение финального тестирования, оптимизация кода и обработка возможных ошибок.
Структуры данных, которые понадобятся при выполнении этапов проекта:
Пользователь (User): • ID: уникальный идентификатор пользователя • Username: логин пользователя • Password: хэшированный пароль • Email: адрес электронной почты (опционально)
Товар (Product): • ID: уникальный идентификатор товара • Name: название товара • Description: описание товара • Price: цена товара • Quantity: количество товара на складе
Покупка (Purchase): • ID: уникальный идентификатор покупки • UserID: идентификатор пользователя, совершившего покупку • ProductID: идентификатор купленного товара • Quantity: количество купленного товара • Timestamp: временная метка покупки
Методы:
Методы для управления пользователями: • RegisterUser(username, password, email): регистрация нового пользователя. • LoginUser(username, password): авторизация пользователя. • GetUserProfile(userID): получение информации о профиле пользователя.
Методы для управления товарами: • AddProduct(name, description, price, quantity): добавление нового товара. • GetAllProducts(): получение списка всех товаров. • GetProductByID(productID): получение информации о конкретном товаре. • UpdateProduct(productID, name, description, price, quantity): редактирование информации о товаре. • DeleteProduct(productID): удаление товара.
Методы для управления покупками: • MakePurchase(userID, productID, quantity): совершение покупки товара. • GetUserPurchases(userID): получение списка всех покупок пользователя. • GetProductPurchases(productID): получение списка всех покупок по конкретному товару. Дополнительные методы: • HashPassword(password): хэширование пароля перед сохранением в базе данных. • VerifyPassword(savedHash, inputPassword): проверка введенного пароля по хэшу.