Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
910157e
feat(Document): generate pdf-version of document
IamEvrik Oct 24, 2023
0c62b6c
Merge pull request #145 from document-template-engine/develop
Paymir121 Nov 3, 2023
99ae726
Merge pull request #146 from document-template-engine/develop
Paymir121 Nov 4, 2023
d78fbb2
Merge pull request #150 from document-template-engine/develop
Paymir121 Nov 7, 2023
bb957ac
Merge pull request #151 from document-template-engine/develop
Paymir121 Nov 7, 2023
8084e91
Merge pull request #152 from document-template-engine/develop
Paymir121 Nov 7, 2023
a48d77b
Merge pull request #156 from document-template-engine/develop
Paymir121 Nov 8, 2023
109d2c6
заглушка
Paymir121 Nov 12, 2023
6d4b027
Merge pull request #160 from document-template-engine/develop
Paymir121 Nov 12, 2023
ffa372d
заглушка
Paymir121 Nov 12, 2023
19c9ede
Merge pull request #161 from document-template-engine/develop
Paymir121 Nov 12, 2023
34b653b
Update README.md
ASTimch Nov 13, 2023
c7aadeb
new serv
Nov 13, 2023
79277b0
Merge pull request #162 from document-template-engine/develop
Paymir121 Nov 13, 2023
1b056f6
new serv
Nov 13, 2023
1d985e4
Merge pull request #163 from document-template-engine/develop
Paymir121 Nov 13, 2023
b93e112
fix
Paymir121 Nov 13, 2023
ac5025a
Merge pull request #164 from document-template-engine/develop
Paymir121 Nov 13, 2023
40949d2
fix
Paymir121 Nov 13, 2023
6a958e3
fix
Paymir121 Nov 13, 2023
6dfe71d
Merge branch 'main' into develop
Paymir121 Nov 13, 2023
939984c
Merge pull request #167 from document-template-engine/develop
Paymir121 Nov 13, 2023
a63a580
Merge remote-tracking branch 'origin/develop' into features/export-pdf
IamEvrik Nov 13, 2023
805fe18
Merge pull request #166 from document-template-engine/features/export…
IamEvrik Nov 13, 2023
c6a07c8
Merge pull request #168 from document-template-engine/develop
Paymir121 Nov 13, 2023
8f10e8a
Update settings.py
Paymir121 Nov 14, 2023
d7106cd
Добавлены методы для загрузки полей шаблона post и загрузки файла шаб…
ASTimch Nov 14, 2023
9e0b990
fix: flake8 issues
ASTimch Nov 15, 2023
6cb2fea
fix: clear garpage comments
ASTimch Nov 15, 2023
b26cecc
bugfix: templates/id/download_preview/ убрано поле document
ASTimch Nov 16, 2023
7e84b58
Update README.md
ASTimch Nov 16, 2023
e32d892
Merge pull request #171 from document-template-engine/ASTimch-patch-1
ASTimch Nov 16, 2023
7405c37
Merge pull request #170 from document-template-engine/feature/templat…
ASTimch Nov 16, 2023
1db137e
Merge pull request #172 from document-template-engine/develop
Paymir121 Nov 16, 2023
4bd003e
aspone
Paymir121 Nov 16, 2023
3eb0d2d
fix: static for backend
ASTimch Nov 17, 2023
c2019fa
Update main.yml
Paymir121 Nov 18, 2023
123390b
Merge pull request #173 from document-template-engine/develop
Paymir121 Nov 18, 2023
b0800f3
Тесты сериализатора загрузки шаблона + мелкие правки Template (поле u…
ASTimch Nov 18, 2023
bb7199b
Merge pull request #174 from document-template-engine/feat/upload_tem…
ASTimch Nov 18, 2023
eded5c0
fix: patch document ош500 при отсутсвии document_fields в запросе + в…
ASTimch Nov 19, 2023
b85b45e
Merge pull request #175 from document-template-engine/fix/patch_document
ASTimch Nov 19, 2023
972a4f4
refactor(api.v1.views): move create docx and pdf to utils.py
IamEvrik Nov 20, 2023
1d1d860
Merge pull request #176 from document-template-engine/refactoring/exp…
IamEvrik Nov 20, 2023
d7d7d88
?pdf=true added to template/{id}/donwload_draft/ и template/{id}/donw…
ASTimch Nov 20, 2023
9e30037
Merge pull request #177 from document-template-engine/fead/pdf_for_an…
ASTimch Nov 20, 2023
0695321
Merge pull request #178 from document-template-engine/develop
Paymir121 Nov 20, 2023
26c786f
Template field description added
ASTimch Nov 21, 2023
cca8c1f
fix(download_pdf): deleting temporary pdf-files
IamEvrik Nov 21, 2023
16558cf
Merge pull request #183 from document-template-engine/fix/delete-temp…
IamEvrik Nov 21, 2023
4f3a2f8
feat(TemplateFields): add validation regexp for template fields
IamEvrik Nov 21, 2023
97c56f0
Merge pull request #184 from document-template-engine/features/field-…
IamEvrik Nov 21, 2023
8299cb4
fix:template_upload + добавлены файлы претензий
ASTimch Nov 22, 2023
1b2155f
Merge pull request #191 from document-template-engine/feat/add_templates
ASTimch Nov 22, 2023
a7e0744
Правка шаблонов по детским садам
ASTimch Nov 23, 2023
9baca97
Merge pull request #193 from document-template-engine/feat/dsad_templ…
ASTimch Nov 23, 2023
81122c1
Добавлено поле default - значение по умолчанию для полей шаблонов.
ASTimch Nov 23, 2023
9a0ff3e
Merge pull request #194 from document-template-engine/feat/dsad_templ…
ASTimch Nov 23, 2023
97c2f13
fix/custom message email уже используется
ASTimch Nov 24, 2023
a62f866
fix:user email model
ASTimch Nov 24, 2023
610f265
Merge pull request #195 from document-template-engine/fix/custom_dupl…
ASTimch Nov 24, 2023
8901feb
Endpoint /me fix put/patch
andrzej-skuridin Nov 24, 2023
4e7fe9e
Мелкая правка шаблонов
ASTimch Nov 25, 2023
e9711f6
Добавлен custom_fieldtypes_validation (пока только конвертит дату в д…
ASTimch Nov 26, 2023
c661b0d
Merge pull request #196 from document-template-engine/feat/custom_fie…
ASTimch Nov 26, 2023
7474665
мелкие правки ошибок по маршрутам
ASTimch Nov 26, 2023
e39be4b
Merge pull request #202 from document-template-engine/fix/doc_field_path
ASTimch Nov 26, 2023
e81184c
Merge pull request #203 from document-template-engine/develop
Paymir121 Nov 26, 2023
d0b0095
hotfix/правка pdf для черновиков и шаблонов
ASTimch Nov 26, 2023
eb9dfb5
fix utils.py convert_file_to_pdf
ASTimch Nov 27, 2023
8733b1f
Merge pull request #204 from document-template-engine/develop
Paymir121 Nov 27, 2023
4c55e4e
Update settings.py
Paymir121 Nov 27, 2023
2e03087
Merge pull request #206 from document-template-engine/Paymir121-patch-1
Paymir121 Nov 27, 2023
76a8036
bigfix/ pdf + preview jpg
ASTimch Nov 27, 2023
6a2dab2
Merge pull request #207 from document-template-engine/develop
Paymir121 Nov 27, 2023
7e13905
Update settings.py
Paymir121 Nov 27, 2023
e8a7ac5
Merge pull request #208 from document-template-engine/develop
Paymir121 Nov 27, 2023
9b99c00
Update settings.py
Paymir121 Nov 27, 2023
c1b1002
Merge pull request #209 from document-template-engine/Paymir121-patch-2
Paymir121 Nov 27, 2023
980f92f
Merge branch 'develop' of https://github.com/document-template-engine…
Paymir121 Nov 27, 2023
0ed4461
Update settings.py
Paymir121 Nov 27, 2023
d43a50d
Merge pull request #210 from document-template-engine/Paymir121-patch-3
Paymir121 Nov 27, 2023
6d48c88
Merge branch 'develop' of https://github.com/document-template-engine…
Paymir121 Nov 27, 2023
cee724d
fix templates
ASTimch Dec 5, 2023
3576d38
sentry logging added
ASTimch Dec 5, 2023
976e3eb
Merge pull request #212 from document-template-engine/feat/sentry_log…
ASTimch Dec 5, 2023
447a0bd
fix requirements.txt
ASTimch Dec 5, 2023
72cb9ff
fix requirements
ASTimch Dec 5, 2023
da2a53e
Merge pull request #214 from document-template-engine/feat/sentry_log…
ASTimch Dec 5, 2023
c8b739c
fix pdf time error
ASTimch Dec 5, 2023
10ecb16
Merge pull request #215 from document-template-engine/feat/sentry_log…
ASTimch Dec 5, 2023
2cf3076
fix: templates and updated field at documents
ASTimch Dec 13, 2023
980aac4
password
Paymir121 Dec 24, 2023
2422a07
Заглушки
Paymir121 Dec 24, 2023
01cab22
Merge branch 'main' into develop
Paymir121 Dec 24, 2023
2050237
Merge pull request #216 from document-template-engine/develop
Paymir121 Dec 24, 2023
9c2213e
fix aspone
Paymir121 Dec 24, 2023
a0dc347
йцй
Paymir121 Jan 2, 2024
953c187
Merge pull request #217 from document-template-engine/develop
Paymir121 Jan 2, 2024
2688d87
add object
Paymir121 Jan 2, 2024
236a6a7
view set
Paymir121 Jan 3, 2024
09118ee
kek
Paymir121 Jan 3, 2024
82ff4e9
refactory
Paymir121 Jan 3, 2024
d26e1b9
2
Paymir121 Jan 4, 2024
07df9b9
Добавил заглушки к обьектам
Paymir121 Jan 4, 2024
051dc78
Merge pull request #219 from document-template-engine/experimental
Paymir121 Jan 15, 2024
1ab0a60
fix
Paymir121 Jan 15, 2024
856f2e3
Merge branch 'experimental' of https://github.com/document-template-e…
Paymir121 Jan 15, 2024
e0c5e16
Merge pull request #220 from document-template-engine/experimental
Paymir121 Jan 15, 2024
e42261d
fix
Paymir121 Jan 21, 2024
c491e04
Merge pull request #221 from document-template-engine/experimental
Paymir121 Jan 21, 2024
9657fdc
fix
Paymir121 Jan 21, 2024
909f3ec
Merge pull request #222 from document-template-engine/experimental
Paymir121 Jan 21, 2024
2941896
add validator
Mar 12, 2024
b35edfd
Update validators.py
Paymir121 Mar 13, 2024
9781d40
django allauth vk yandex
Paymir121 Apr 3, 2024
306e453
django allauth vk yandex
Paymir121 Apr 3, 2024
0d9edf4
allauth VK and ayandex
Paymir121 Apr 3, 2024
dd84991
Merge branch 'develop' into YandexAuth
Paymir121 Apr 4, 2024
83fb199
Merge pull request #224 from document-template-engine/YandexAuth
Paymir121 Apr 4, 2024
46d5362
Merge branch 'main' into develop
Paymir121 Apr 4, 2024
ca6e8c7
Update requirements.txt
Paymir121 Apr 4, 2024
01c04f8
fix
Paymir121 Apr 4, 2024
bbaaa99
fix
Paymir121 Apr 4, 2024
00b8406
fix
Paymir121 Apr 4, 2024
d83631a
fix
Paymir121 Apr 4, 2024
34c99ae
Update nginx.conf
Paymir121 Apr 5, 2024
eb7764c
Update nginx.conf
Paymir121 Apr 5, 2024
35f1088
Update nginx.conf
Paymir121 Apr 6, 2024
c058d9a
Update settings.py
Paymir121 Apr 14, 2024
56be36c
Update settings.py
Paymir121 Apr 15, 2024
259ce8d
add github
Apr 20, 2024
24ff926
add all auth
Apr 20, 2024
a78f460
add all auth
Apr 20, 2024
4323bac
add all auth
Apr 20, 2024
bbee4b6
add all auth
Apr 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,27 @@ jobs:
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/${{ secrets.PROJECT_NAME }}_backend:latest


build_gateway_and_push_to_docker_hub:
name: Push gateway Docker image to DockerHub
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push to DockerHub
uses: docker/build-push-action@v4
with:
context: ./gateway/
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/${{ secrets.PROJECT_NAME }}_gateway:latest

deploy:
runs-on: ubuntu-latest
needs:
Expand All @@ -74,24 +95,23 @@ jobs:
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
key: ${{ secrets.SSH_KEY }}
passphrase: ${{ secrets.SSH_PASSPHRASE }}
password: ${{ secrets.PASSWORD}}
source: "docker-compose.production.yml"
target: "documents_templates"
- name: Executing remote ssh commands to deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
key: ${{ secrets.SSH_KEY }}
passphrase: ${{ secrets.SSH_PASSPHRASE }}
password: ${{ secrets.PASSWORD }}
script: |
cd documents_templates
sudo docker compose -f docker-compose.production.yml pull
sudo docker compose -f docker-compose.production.yml down
sudo docker compose -f docker-compose.production.yml up -d
sudo docker system prune -af



send_message:
runs-on: ubuntu-latest
needs: deploy
Expand Down
113 changes: 61 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,25 @@
многих областях, включая бизнес, юриспруденцию, образование и другие.



## Основная логика
В основе логики шаблонизатора лежит создание готовых word документов на основе шаблона. Шаблон создается по определенным правилам и хранится на сервере в виде docx файлов. В шаблонах предусмотрены возможности дополнительных обработок вводимых пользователем данных (склонения по падежам, доп форматирование и др), более подробно об этом можно глянуть в инструкции([ссылка](https://github.com/document-template-engine/demo-repository/files/13055545/_._._.docx)). На данном этабе шаблон и его поля создаются администратором. Система регистрации и авторизации построена на основе djoser, с некоторыми модификациями

Невторизированный пользователь имеет возможность:
- просмотреть список всех доступных шаблонов базы /api/templates/
- скачать шаблон документа /api/templates/{id}/download_draft/
- сформировать превью документа на основе шаблона и предоставляемых данных полей и скачать его (без сохранения на сервере) /api/templates/{id}/download_preview/

Авторизованный пользователь имеет возможность:
- формировать документы на основании выбранного шаблона и предоставленных данных и сохранять документы на сервере
- скачивать сохраненные документы в формате docx /api/documents/{id}/download_dpcument/
- добавлять шаблоны или документы в избранное
- доступ к документам и данным отдельных документов имеет только администратор или автор документа

Администратор имеет возможность:
- загрузить информацию о новом шаблоне (наименование, описание полей) POST /api/templates/
- обновить docx файл шаблона PUT(PATCH) /api/templates/{id}/upload_template/

### Технологии
- **Python - 3.9**
- **Django - 3.2**
Expand All @@ -17,7 +36,6 @@

### Авторы
- [Nikki Nikonor](https://github.com/Paymir121)
- [Дубинин Николай](https://github.com/dubininnik)
- [Тимченко Александр](https://github.com/ASTimch)
- [Скуридин Андрей](https://github.com/andrzej-skuridin)
- [Николай Петров](https://github.com/NikolayPetrow23)
Expand All @@ -30,116 +48,121 @@
Клонируете репозиторий:

```bash
git clone git@github.com:document-template-engine/backend.git
git clone git@github.com:document-template-engine/backend.git
```

### Cоздать и активировать виртуальное окружение:
### Cоздать виртуальное окружение:
```
python -m venv venv
```
# активировать виртуальное окружение, Если у вас Linux/macOS
```
python -m venv venv

# Если у вас Linux/macOS

source venv/bin/activate

# Если у вас windows

```
# Активировать виртуальное окружение, Если у вас windows
```
source venv/scripts/activate

```

### Установить зависимости из файла requirements.txt:
```
cd backend
python -m pip install --upgrade pip
pip install -r requirements.txt
cd backend
python -m pip install --upgrade pip
pip install -r requirements.txt
```


### Выполнить миграции:
```
cd backend
python manage.py makemigrations
python manage.py migrate
python manage.py makemigrations
python manage.py migrate
```

### Запустить проект:
```
cd backend
python manage.py runserver
python manage.py runserver
```

### Создать суперпользователя:
```
cd backend
python manage.py createsuperuser
python manage.py createsuperuser
```

### Добавить темлейтов в базу:
```
cd backend
python manage.py init_templates
python manage.py init_field_types
python manage.py init_templates

```

## Запуск докер контейнеров на локальной машине:

### Билдим проект и запускаем:
```
docker compose up --build
docker compose up --build
```

### Выполнить миграции:
```
docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py migrate
```

### Выполнить создание суперпользователя:
```
docker compose exec backend python manage.py createsuperuser
docker compose exec backend python manage.py createsuperuser
```

### Выполнить Собрать статику Django:
```
docker compose exec backend python manage.py collectstatic
sudo docker compose -f docker-compose.production.yml exec backend cp -r /app/collected_static/. /app/static/
sudo docker compose exec backend python manage.py collectstatic
sudo docker compose exec backend cp -r /app/collected_static/. /app/static/
```

## Запуск докер контейнеров на удаленной машине:

### Выполнить обновление apt:
```
sudo apt update
sudo apt update
```

### Билдим проект и запускаем:
```
sudo docker compose -f docker-compose.production.yml up --build
sudo docker compose -f docker-compose.production.yml up --build
```

### Выполнить миграции:
```
docker compose -f docker-compose.production.yml exec backend python manage.py migrate
sudo docker compose -f docker-compose.production.yml exec backend python manage.py migrate
```

### Выполнить миграции:
```
docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser
docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser
```

### Выполнить Собрать статику Django:
```
sudo docker compose -f docker-compose.production.yml exec backend python manage.py collectstatic
sudo docker compose -f docker-compose.production.yml exec backend cp -r /app/collected_static/. /app/static/
```

### Выполнить миграции:
```
sudo docker compose -f docker-compose.production.yml exec backend python manage.py init_templates
sudo docker compose -f docker-compose.production.yml exec backend python manage.py init_field_types
sudo docker compose -f docker-compose.production.yml exec backend python manage.py init_templates
```

### Настройки nginx:
```
sudo nano /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-enabled/default
```

## Примеры запросов и ответов к API

### Регистрация
#### Endpoint
```
POST api/v1/users/
POST api/v1/users/
```
#### Пример запроса
```
Expand All @@ -159,7 +182,7 @@ POST api/v1/users/
### Аутентификация
#### Endpoint
```
POST api/v1/auth/token/login/
POST api/v1/auth/token/login/
```

#### Пример запроса
Expand All @@ -180,7 +203,7 @@ POST api/v1/auth/token/login/
### Узнать свои данные
#### Endpoint.
```
GET api/v1/users/me/
GET api/v1/users/me/
```

#### Пример ответа
Expand All @@ -194,7 +217,7 @@ GET api/v1/users/me/
### Просмотр списка пользователей
#### Endpoint
```
GET api/v1/users/
GET api/v1/users/
```

#### Пример ответа.
Expand All @@ -215,17 +238,3 @@ GET api/v1/users/
]
}
```

## Основная логика
В основе логики шаблонизатора лежит создание готовых word документов на основе шаблона. Шаблон создается по определенным правилам и хранится на сервере в виде docx файлов. В шаблонах предусмотрены возможности дополнительных обработок вводимых пользователем данных (склонения по падежам, доп форматирование и др), более подробно об этом можно глянуть в инструкции([ссылка](https://github.com/document-template-engine/demo-repository/files/13055545/_._._.docx)). На данном этабе шаблон и его поля создаются администратором. Система регистрации и авторизации построена на основе djoser, с некоторыми модификациями

Невторизированный пользователь имеет возможность:
- просмотреть список всех доступных шаблонов базы /api/templates/
- скачать шаблон документа /api/templates/{id}/download_draft/
- сформировать превью документа на основе шаблона и предоставляемых данных полей и скачать его (без сохранения на сервере) /api/templates/{id}/download_preview/
Авторизованный пользователь имеет возможность:
- формировать документы на основании выбранного шаблона и предоставленных данных и сохранять документы на сервере
- скачивать сохраненные документы в формате docx /api/documents/{id}/download_dpcument/
- добавлять шаблоны или документы в избранное
- доступ к документам и данным отдельных документов имеет только администратор или автор документа

21 changes: 7 additions & 14 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
FROM python:3.9-bullseye
FROM python:3.9

ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libc6 \
libgcc1 \
libgssapi-krb5-2 \
libicu67 \
libssl1.1 \
libstdc++6 \
zlib1g
RUN echo "deb http://deb.debian.org/debian bookworm main contrib" | tee /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y --no-install-recommends libreoffice-writer
RUN apt-get install -y libreoffice-java-common
RUN apt-get install -y ttf-mscorefonts-installer

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt --no-cache-dir

COPY . .

RUN chmod a+x commands/app.sh
CMD ["gunicorn", "--bind", "0.0.0.0:9000", "backend.wsgi"]
3 changes: 2 additions & 1 deletion backend/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
from django.conf.urls import url

urlpatterns = [
path("", include("api.v1.urls")),
# path("v1/", include("api.v1.urls")),
path("v2/", include("api.v2.urls")),
]


Expand Down
21 changes: 21 additions & 0 deletions backend/api/v1/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,30 @@ def has_object_permission(self, request, view, obj):
return obj.owner == request.user or request.user.is_superuser


class IsAdminOrReadOnly(permissions.BasePermission):
"""Доступ: Админ или только для чтения"""

def has_permission(self, request, view):
"""Видеть список могут все, добавлять только администратор."""

return request.method in permissions.SAFE_METHODS or (
request.user.is_authenticated and request.user.is_superuser
)

def has_object_permission(self, request, view, obj):
return (
request.method in permissions.SAFE_METHODS
or request.user.is_superuser
)


class IsOwner(permissions.BasePermission):
"""Доступ: только владелец."""

def has_permission(self, request, view):
"""Видеть список может только владелец."""
return request.user.is_authenticated

def has_object_permission(self, request, view, obj):
"""Под объектом подразумевается Document."""
return request.user.is_authenticated and obj.owner == request.user
Loading