Giter Site home page Giter Site logo

jwt_teacher_student's Introduction

JWT_Teacher_Student

Dmitriy Liakhov [email protected]

Завдання

Розробити Appointment API для онлайн університету, в якому буде 2 ролі: викладач та студент.

  • Викладач :
    • може вказувати коли і скільки часу він доступний для індивідуальних занять
    • може вказувати ціну за певну к-сть часу. Наприклад 15 хв коштують 30$, 30 хв = 55$, 60 хв = 100$
    • може підтверджувати або відхиляти участь студентів (approve/decline)
  • Студент :
    • може зарезервувати певний час
    • може скасувати резервацію
  • Система повинна мати :
    • REST Api для реєстрації, логування користувача (JWT token)
    • REST Api Апі для викладача
    • REST Api Апі для студента
    • Логіку та Валідацію даних
    • Збереження даних в БД
  • Мінімально необхідні валідації даних :
    • Чи поля об’єкта не пусті
    • Чи dateFrom < dateTo
    • і т.д.
  • Технічний стек :
    • Java 8
    • Spring Boot 2.2.* (Security, MVC, Data Jpa)
    • SQL
    • Maven 3.6.*

Технічна документація

  • Как зупустить проект?
    • Скачать репозиторий
    • Создать SQL базу
    • В файле application.properties внести зміни
      • spring.datasource.url =jdbc:mysql://localhost:3306/[імя SQL бази]?serverTimezone=UTC
      • spring.liquibase.url=jdbc:mysql://localhost:3306/[імя SQL бази]?serverTimezone=UTC
      • spring.datasource.username=[SQL username]
      • spring.liquibase.user=[SQL username]
      • spring.datasource.password=[SQL password]
      • spring.liquibase.password=[SQL password]
    • P.S: База повинна бути пустою.

Запити

- Реєстрація

{
    "username":"Ivan",
    "firstName":"Ivanovich",
    "lastName":"Ivanov",
    "email":"[email protected]",
    "password":"verySecurePassword",
    "role":"STUDENT"
}
  • Відповідь:
{
    "user Ivan": "Registration successful: User{username='Ivan', firstName='Ivanovich', lastName='Ivanov', email='[email protected]', money='0', password='[password for encryption via bcrypt]'}"
}

- Логін

{
    "username":"Ivan",
    "password":"verySecurePassword"
}
  • Відповідь:
{
    "username": "Ivan",
    "token": "[token]"
}
  • Отриманий "token" потрібно буде додавати в "Header" в "Authorization" з додаванням в початок токену "Bearer_". Приклад "Header":
[
   {
       "key":"Authorization",
       "value":"Bearer_[token]",
       "description":"",
       "type":"text",
       "enabled":true
   }
]

- В якості ролі "ADMIN"

[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Відповідь:
{
    "id": 2,
    "username": "teacher",
    "firstName": "FirstNameT",
    "lastName": "LastNameT",
    "email": "[email protected]"
}

- В якості ролі "STUDENT"

Створити запит на індивідуальне зайняття
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Тіло запиту, приклад:
{
    "dateStart":"2020-01-24 00:00",
    "dateEnd":"2020-01-24 00:01",
    "price":"24",
    "idTeacher":"2"
}
  • Відповідь:
{
    "msg": "The lesson was created by - Ivan; he chose a teacher - teacher",
    "timeEnd": "2020-01-24 00:00",
    "timeStart": "2020-01-24 00:01"
}
Подивитися всі свої запити на індивідуальні зайняття
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Відповідь:
{
    "msg": [
        {
            "id": 1,
            "created": "2020-01-23 00:00",
            "updated": "2020-01-23 00:00",
            "status": "ACTIVE",
            "idTeacher": 2,
            "dateStart": "2020-01-24 00:00",
            "dateEnd": "2020-01-24 00:01",
            "price": 24
        }
    ]
}
Видалити (змінити статус) запит на індивідуальне зайняття
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Тіло запиту, приклад:
[
    1,
    2
]
  • Відповідь:
{
    "lesson 1": "Now the status is this: NOT_ACTIVE",
    "lesson 2": "Now the status is this: NOT_ACTIVE"
}
Подивитися всих вчителів
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Відповідь:
{
    "Available teacher 'teacher'": "His id: 2"
}
Подивитися вчителя та його прайс по "id" вчителя
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Відповідь:
{
    "Teacher: 'teacher'; His id 2": {
        "Price 1": "Time 60 minutes; Price: 55"
    }
}

- В якості ролі "TEACHER"

Подивитися пропозиції на індивідуальні зайняття
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Відповідь:
{
    "msg": [
        {
            "id": 6,
            "created": "2020-01-24 00:00",
            "updated": "2020-01-24 00:00",
            "status": "CONSIDERATION",
            "idTeacher": 2,
            "dateStart": "2020-01-25 00:00",
            "dateEnd": "2020-01-25 00:01",
            "price": 24
        }
    ]
}
Прийняти та відмінити зайняття
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Тіло запиту, приклад:
[
    {
        "lessonId":[
           1,
           2
        ],
        "status": "CONSIDERATION"
    }
]
  • Відповідь:
{
    "lesson 1": "Now the status is: NOT_ACTIVE",
    "lesson 2": "Now the status is: NOT_ACTIVE"
}
Додати час коли вільний
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Тіло запиту, приклад:
[
    {
        "timeStart": "2020-01-24 08:30",
        "timeEnd": "2020-01-24 09:00"
    },
    {
        "timeStart": "2020-01-25 08:30",
        "timeEnd": "2020-01-25 09:00"
    }
]
  • Відповідь:
{
    "msg": "Available time was add!",
    "interval 0": "Start: 2020-01-24 08:30;  End: 2020-01-24 09:00",
    "interval 1": "Start: 2020-01-25 08:30;  End: 2020-01-25 09:00"
}
Додати ціну за певний проміжок часу (Прайс-лист)
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Тіло запиту, приклад:
{
    "time":"60",
    "price":"100"
}
  • Відповідь:
{
    "price": {
        "time": 60,
        "price": 100
    }
}
Подивитися свій прайс-лист
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Відповідь:
{
    "Prices": {
        "Price 0": "Time 60 minutes; Price: 100",
    },
    "My username": "teacher"
}
Видалити щось з прайс-листу
[
    {
        "key":"Authorization",
        "value":"Bearer_[token]",
        "description":"",
        "type":"text",
        "enabled":true
    }
]
  • Тіло запиту, приклад:
[
    1
]
  • Відповідь:
{
    "Price 1": "Now the status is this: NOT_ACTIVE"
}

- Дані які будуть в базі після першого запуску

  • При першому запуску, вони автоматично будуть додані як і таблиці.
[
  {
  "user":[
                {
                  "username":"student",
                  "money":"0",
                  "email":"[email protected]",
                  "first_name":"FirstNameS",
                  "last_name":"LastNameS",
                  "password":"$2b$10$mY8.DORMnmctP1g8Rc9TlOk9sucv2uDefMe11eN1d556EG7vCqMSO",
                  "created":"2020-01-01 12:12:12",
                  "updated":"2020-01-01 12:12:12",
                  "status":"ACTIVE"
                },
                {
                  "username":"teacher",
                  "money":"0",
                  "email":"[email protected]",
                  "first_name":"FirstNameT",
                  "last_name":"LastNameT",
                  "password":"$2b$10$mY8.DORMnmctP1g8Rc9TlOk9sucv2uDefMe11eN1d556EG7vCqMSO",
                  "created":"2020-01-01 12:12:12",
                  "updated":"2020-01-01 12:12:12",
                  "status":"ACTIVE"
                },
                {
                  "username":"admin",
                  "money":"0",
                  "email":"[email protected]",
                  "first_name":"FirstNameA",
                  "last_name":"LastNameA",
                  "password":"$2b$10$mY8.DORMnmctP1g8Rc9TlOk9sucv2uDefMe11eN1d556EG7vCqMSO",
                  "created":"2020-01-01 12:12:12",
                  "updated":"2020-01-01 12:12:12",
                  "status":"ACTIVE"
                }
         ],
  "role":[
                {
                  "name":"ROLE_STUDENT",
                },
                {
                  "name":"ROLE_TEACHER",
                },
                {
                  "name":"ROLE_ADMIN",
                }
         ],
  "role_user":[
                {
                  "user_id":"1",
                  "role_id":"1",
                },
                {
                  "user_id":"2",
                  "role_id":"2",
                },
                {
                  "user_id":"3",
                  "role_id":"3",
                }
         ]
  }
]

- Залишилось додати

  • Перевірка тайм слотів на перетин між собою та на унікальність
  • Написати тести

jwt_teacher_student's People

Contributors

liakhovdmitriy avatar

Watchers

James Cloos avatar

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.