Git Product home page Git Product logo

ipc_practice's Introduction

ipc_practice

Практика Интерпроком 2022

Предприятие и диаграмма баз данных

Предприятие: "xs5 retail group"

Таблицы базы данных: users, roles, permissions, purchases, item_sets, contracts_item_sets, contracts, suppliers, store items, stores, sales

database

Ролевая модель системы для разных приложений системы

model

ТЗ

Создать информационную систему для небольшой сети продуктовых магазинов. Система должна позволять отслеживать наличие товаров на складе, отслеживать продажи, создавать запросы на поставки, вести учет поставщиков и заключенных с ними контрактов.

В основе будет:

  • БД – Postgres
  • Бэк – Python + Starlette
  • Клиент – js, react, reactadmin
  • Оценка качества кода – Flake 8

ipc_practice's People

Contributors

antipod237 avatar elena-mayorova avatar absolutelyh avatar smdi17 avatar kzagorulko avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

ipc_practice's Issues

Валидация пароля

При создании пароля валидация пароля не происходит. Придумать и реализовать функцию для проверки пароля на сложность (погуглить и взять готовое решение, велосипед не изобретаем). Подсмотреть, как эту проверку включить в валидацию, можно в проекте прошлогодних практикантов (см. Полезные ресурсы)

Ресурс для Поставщиков

Создать роуты для приложения Поставщики (выполнить шаги 5-7 отсюда)

Стоит уделить внимание декораторам, они важны и упрощают вам во много жизнь (та же статья).

Также можно смотреть в ресурсы users и делать по аналогии. Нам нужны методы get (для списка), post, get (по id) и patch (по id). Также обратите внимание, что есть штука с permissions, мы их пока не сделали, но это не мешает указывать действия через декораторы.

Фронт для Номенклатур

Создать фронт приложения Номенклатуры

Оно отличается от остальных наличием маппинга с Договорами.

изображение

Это значит, что помимо обычного функционала должна быть возможность привязывать к одной номенклатуре несколько контрактов. Как визуально это реализовать - на твое усмотрение.

Можно сделать что-то вроде таблицы или списка с кнопкой добавления договора

Полномочия

У нас практически пустая таблица полномочий. Если открыть самую первую миграцию, то можно увидеть следующее:

connection.execute(
    sa.insert(t_permissions).values([            
        # Admin           
       {'app_name': 'users', 'action': 'all', 'role_id': 1},            
        # TODO: it needs more permissions
            
        # demo            
        {'app_name': 'users', 'action': 'get', 'role_id': 2},            
        # TODO: it needs more permissions        
    ])
)

У нас приложения больше, чем одно.
Поэтому хорошо было бы добавить полномочий (прям в первой миграции) и сделать даунгред/апгрейд дб
В принципе действия у всех приложений одинаковы (у админа везде all, а у demo веде get), так что тут чисто по-копировать по-вставлять и app_name поменять.

Модель для Поставщиков

  • Создать модель для поставщиков согласно ERD
  • Произвести миграции (сгенерировать и апгрейднуть у себя локально, посмотреть, чтобы не было ошибок)

изображение

Посмотреть как выглядят модели можно в users/models

В этой задаче необходимо выполнить шаги 1-4 отсюда

ресурсы добавлять не надо!

Ошибка при обновлении записи в приложении Договоры

Во время попытки обновления записи из договоров на фронте (т.е. через приложение, а не запросы) возникает ошибка.

Где и почему:

Ошибку выдает метод get_date из backend\erpsystem\core\utils\dates.py:

image

В нем с помощью регулярного выражения проверяется соответствие передаваемой даты формату YYYY-MM-DD.

Этот метод в ресурсах договора вызывается в post и в patch, но ошибка возникает только в patch.

Почему так? Потому что при занесении в базу данные находятся в нужном формате YYYY-MM-DD, а вот уже в базе меняются на YYYY-MM-DD HH:mm:ss.SSSZ, потому что в базе у этого поля стоит тип timestamptz (= по сути datetime с timezone, что в модели устанавливается как db.DateTime(timezone=True)). Из-за этого при попытке обновления и возникает ошибка.

Что делать:

  1. Первый вариант - поменять в модели формат даты с datetime на date
  2. Второй вариант - переписать метод get_date (а соответственно и регулярку 💩 ) с учетом разных форматов данных на входе post и patch

Я бы выбрала первый вариант, потому что использование datetime в данном случае - это оверкил (имхо).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.