Skip to content

A repo for a test task to get an intership in Chatbots.Studio

Notifications You must be signed in to change notification settings

andriikovall/ChatbotsStudioTestTask

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A test task for ChatBot.Studio intership

Simple school API

Use JSON file format for your requests' body

Overwiev

Authentication

To authenricate this use JSON web token.
Simply add this to your headers and you will be able to use any routes.

Authorization : Bearer {TOKEN}

To get the token you need to make a POST request on /auth/register with fields

Name Type Required
login string +
password string +

Be aware that login mist be unique

Sample response

{
    "message": "You are succesfully registered. Please login to get your JWT"
}

Than POST /auth/login with the same fields and you will get a token.

Sample response

{
    "token": "TOKEN",
    "user": {
        "user_id": "ID",
        "iat": 1580301086,
        "exp": 1582893086
    }
}

Errors

Sample not found error

data[property] = value;
return {
  message: `${entity} with such ${property} is not found`,
  data,
};

GET /student/some_id

{
    "message": "Student with such id is not found",
    "data": {
        "id": "some_id"
    }
}

Error handler

const status = err.status || 500;
res.status(status);
res.json({
  status,
  error: {
    message: err.message,
  },
});

Basic routes

For each entity there is at least 4 routes to interact with

Method Route Description
GET /{entityName}/search Finds entities with parameters needed. All params have to be included in request query. limit and offset are optoinal. Default ones are 10 and 0 accordingly
GET /{entityName}/:id Finds the entity by id and returns it
DELETE /{entityName}/:id Deletes the entity by id and returns it
PUT /{entityName}/:id Updates the entity by id and returns it. For each entity you can not update certain fields. More about it further
POST /{entityName}/new Create new entity

Sample search example

GET /student/search/?name=an

{
    "count": 1,
    "students": [
        {
            "group": "QAXzfRHb",
            "_id": "A5mca8tj",
            "name": "anrii koval"
        }
    ]
}

Sample getting group by id

GET /group/GW_GzGea

{
    "group": {
        "students": [
            {
                "group": "GW_GzGea",
                "_id": "w2bTKGgI",
                "name": "newName"
            }
        ],
        "_id": "GW_GzGea",
        "name": "newName",
        "specialisationCode": 121
    }
}

Entities models

Note that required fields have to be submited in request for creating a new entity

Lesson

Property Type Required
name String +
teacher String(id) +
groups String(id)[] -
place String -
indexNumber Int -

Group

Property Type Required
name String +
students String(id)[] +
specialisationCode Int +

Note that name value shiuld be unique for each group

Student

Property Type Required
name String +
group String(id) -

Teacher

Property Type Required
name String +
salary Int +
worksSince Date -

Restrictions

Editing _id value for any entity is forbidden

Editing group property for student and students for group is foebidden. Use additional route for group.

Method Route Description
POST /group/:id/addStudents Add students to group
POST /group/:id/removeStudents Remove students from group

In request body provide the list of students' ids than you want to add/remove

Property Type Required
students String(id)[] +

About

A repo for a test task to get an intership in Chatbots.Studio

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published