Skip to content

danilovl/final-work-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

phpunit|phpstan|cs-fixer cypress

FinalWork web application

Thesis management system based on Symfony 7.2

Alt text

Who is it for?

This project is for teachers and students whose interest is to streamline the process of leading the final work. This is especially true for those teachers who carry out the final theses of several dozen students a year.

Requirements

  • PHP 8.3 or higher
  • MySQL
  • Redis
  • RabbitMq
  • Elasticsearch
  • Composer
  • NPM
  • Mercure
  • Minio
  • Kibana
  • or you can use docker

Features

  • Administration panel
  • Management of users(student, opponent, consultant)
  • Management of thesis
  • Assigning tasks to students
  • Scheduling of meetings by the supervisor
  • Uploading unfinished/finished versions of final thesis and downloading them
  • Chat communication between the supervisor and others
  • Sending a bulk message to users
  • Email notification of new events in the system
  • Multi languages
  • An API that covers most of the data
  • Unit test
  • Cypress test
  • and more other features

Project uses extra bundles

  • API Platform - API Platform is a next-generation web framework designed to easily create API-first projects
  • EasyAdmin - EasyAdmin creates administration backends. erd diagram
  • KnpMenuBundle - The KnpMenuBundle integrates the KnpMenu PHP library with Symfony
  • KnpMarkdownBundle - Provide markdown conversion (based on Michel Fortin work) to your Symfony projects
  • RedisBundle - This bundle integrates Predis and phpredis into your Symfony application
  • OverblogGraphQLBundle - This Symfony bundle provides integration of GraphQL
  • OverblogGraphiQLBundle - This Symfony bundle provides integration of GraphiQL interface to your Symfony application
  • Doctrine Behavioral Extensions - This package contains extensions tools to use Doctrine more efficiently
  • RabbitMqBundle - Incorporates messaging in your application via RabbitMQ using the php-amqplib library
  • FOSElasticaBundle - his bundle provides integration with Elasticsearch and Elastica

Project uses own bundles

ERD diagram

Higher resolution: git/readme/erd_diagram.png

Alt text

Test coverage

Alt text

Kibana

This project utilizes the OpenTelemetry API SDK, manually configured specifically for this project using hooks.

Alt text

Configuration environment

You can change configuration in the file:

file: .env or .env.local

Configure the database connection, SMTP and other connection:

DATABASE_URL=mysql://root:@mysql:3306/final_work_system
MESSENGER_TRANSPORT_DSN=amqp://guest:guest@rabbitmq:5672
ELASTICSEARCH_URL=http://elasticsearch:9200/
MAILER_DSN=smtp://user:pass@localhost:25
REDIS_HOST=redis
REDIS_PORT=6379

Google api keys:

GOOGLE_ANALYTICS_CODE=GOOGLE_ANALYTICS_CODE
GOOGLE_MAPS_KEY=GOOGLE_MAPS_KEY

Email notifications:

EMAIL_NOTIFICATION_SENDER=[email protected]
EMAIL_NOTIFICATION_ENABLE_SEND=true
EMAIL_NOTIFICATION_MESSENGER=true
EMAIL_NOTIFICATION_ENABLE_ADD_TO_QUEUE=true

Installation dependencies

Install all the necessary npm dependencies:

$ bin/npm-first-install.sh

Install all the necessary php dependencies:

$ bin/composer-first-install.sh

Other available commands

Create user

$ bin/console app:user-add

or you can import test data dump.sql

$ bin/console app:import-sql docker/mysql/data/dump.sql

Docker

Run docker:

docker-compose -f docker-compose.yml up -d

Run command under node image CLI or you can docker-compose:

docker-compose exec -T node sh bin/npm-first-install.sh

Run command under php image CLI or you can docker-compose:

docker-compose exec -T php sh bin/composer-first-install.sh

Now you can access the application via localhost:9090.

MIT License

FinalWork application is completely free and released under the MIT License.

Author

Created by Vladimir Danilov.