<div style="display: flex; flex-direction: row; align-items: center; justify-content: center;">
  <img style="border-radius: 1em; align-self: center;" src="https://drive.google.com/uc?export=view&id=1_xQWdF3RtL1MRcdDESMPXMBiAQDHCDGT" width="45">
  <h1 style="text-align: center; margin-left: 10px; margin-top: 2px;">IT Lab Platform</h1>
</div>



<div style="display: flex; align-items: center; border: 1px solid #ccc; padding: 10px; border-radius: 5px;">
  <span style="font-size: 20px; margin-right: 10px;">✨</span>
  <span style="font-size: 16px;">
  Этот репозиторий содержит исходный код приложения "IT Lab Application", разработанного для Кубанского государственного университета и Лаборатории коммерческой разработки ПО IT Lab.
  </span>
</div>


## Описание
Проект представляет собой приложение, созданное с использованием NX и JavaScript. Он разработан с целью удовлетворения потребностей Кубанского государственного университета и Лаборатории коммерческой разработки ПО IT Lab.


## Сервисы
- [frontend (ReactJS)](https://github.com/IT-Lab-KubSU/platform/tree/main/apps/frontend)
- [AGW](https://github.com/IT-Lab-KubSU/platform/tree/main/apps/agw)
- [User Data Service](https://github.com/IT-Lab-KubSU/platform/tree/main/apps/user-data)
- [Auth Service](https://github.com/IT-Lab-KubSU/platform/tree/main/apps/auth)
<!-- todo: интегрировать SC Omni Services Embeding c списком всех компонентов -->

## Развертывание

To start the development server run `nx serve frontend`. Open your browser and navigate to http://localhost:4200/. Happy coding!


```bash
npm i -g prisma nx
```

```bash
yarn install
```

```bash
copy .env.example .env
```

```bash
cd apps/auth/serving && copy database.env.example database.env && sudo docker-compose up -d
```

```bash
prisma generate --schema="./libs/prisma-clients/auth/prisma/schema.prisma"
```

```bash
prisma db push --schema="./libs/prisma-clients/auth/prisma/schema.prisma"
```

Run all services:
```bash
nx run-many --parallel --target=serve --projects=agw,user-data,auth,frontend
```
<a style="padding: 10px; background: black; color: white; border-radius: 25px;" href="https://l.djft.ru/r/72/p/itlabplatform1/a/p/a/">
Deploy on SCOS
</a>


## Структура репозитория
Репозиторий содержит следующие основные каталоги и файлы:
- `apps` - приложения
- `libs` - библиотеки
- `tools` - Nx workspaces tools
- `docs` - документация

```mermaid
graph TD;
    agw-e2w-->agw;
    frontend-e2e-->frontend;
    ui-modules-->agw;
    agw-->user-data;
    user-data-->user-data-db;
    user-data-db-->user-data-pg-admin;
    agw-->auth-client;
    auth-client-->auth;
    auth-->auth-db;
    auth-db-->auth-db-admin;
    ui-modules-->ui;
    site-pages-->ui-modules;
    frontend-->site-pages;
    site-pages-->site-layouts;
```

## Generate code

If you happen to use Nx plugins, you can leverage code generators that might come with it.

Run `nx list` to get a list of available plugins and whether they have generators. Then run `nx list <plugin-name>` to see what generators are available.

Learn more about [Nx generators on the docs](https://nx.dev/plugin-features/use-code-generators).

## Running tasks

To execute tasks with Nx use the following syntax:

```
nx <target> <project> <...options>
```

You can also run multiple targets:

```
nx run-many -t <target1> <target2>
```

..or add `-p` to filter specific projects

```
nx run-many -t <target1> <target2> -p <proj1> <proj2>
```

Targets can be defined in the `package.json` or `projects.json`. Learn more [in the docs](https://nx.dev/core-features/run-tasks).

## Want better Editor Integration?

Have a look at the [Nx Console extensions](https://nx.dev/nx-console). It provides autocomplete support, a UI for exploring and running tasks & generators, and more! Available for VSCode, IntelliJ and comes with a LSP for Vim users.

## Ready to deploy?

Just run `nx build demoapp` to build the application. The build artifacts will be stored in the `dist/` directory, ready to be deployed.

# Backend
## Prisma Types
```bash
nx generate @nx/plugin:generator prisma-generator --project=prisma-generator
```

# Frontend
## Create a new Layout
```bash
nx g @nx/react:component NAME --project site-layouts
```
## Create a new Page
```bash
nx g @nx/react:component NAME --project site-pages
```
## Create a new Component
Like navbar, footer, login card, delete modal alert and et.
```bash
nx g @nx/react:component NAME --project ui-modules
```
## Create a new UI Component
Like nav_link, cta_button, username_input and et.
```bash
nx g @nx/react:component NAME --project ui
```

# Стиль кода
## Коммиты
Используемые префиксы:
- **feat:** (от "feature") - новая функциональность или добавление нового компонента.
- **fix:** - исправление ошибок или дефектов.
- **docs:** - изменения, связанные с документацией, например, обновление README или документации в коде.
- **style:** - изменения внешнего вида кода, форматирование, пробелы, отступы и т.д., которые не влияют на его поведение.
- **refactor:** - рефакторинг кода без исправления ошибок или добавления новых функций.
- **test:** - добавление или исправление тестов.
- **chore:** - изменения в сборочных скриптах, настройках инструментов, обновление зависимостей и т.д.
- **perf:** - изменения, связанные с оптимизацией производительности.
- **revert:** - отмена предыдущего коммита.
- **merge:** - коммит, созданный при слиянии веток.
- **release:** - коммит, связанный с выпуском новой версии.
- **require:** - коммит, связанный с установкой новой библиотеки
