Coder Social home page Coder Social logo

chat_dot's Introduction

Projektas: „ChatDot“

Modulis: T120B165 Saityno taikomųjų programų projektavimas

Studentas: Arnas Tamašauskas IFF-9/11

Sprendžiamo uždavinio aprašymas

Projekto tikslas – sukurti platformą kurioje galima bendrauti žmonėms skirtingomis temomis, kanaluose/serveriuose skirtiems specifinėms temoms. Veikimo principas – Sudaro dvi dalys – client/server architektūra. Paprastas vartotojas galės peržiūrėti visus serverius ir serveriuose esančius kanalus ,kanaluose esančias žinutes su atsakymais ir visus kanaluose esančius vartotojus. Ten vartotojas gali specifiniame kanale rašyti žinutes (yra galimybė jas ištrinti bei redaguoti).

Administratorius (pagrindinis)

Gali atlikti visas CRUD operacijas su vartotojais (Users) Gali atlikti visas CRUD operacijas su žinutėmis (Messages) Gali atlikti visas CRUD operacijas su atsakymais (Reply) Gali atlikti visas CRUD operacijas su kanalais (Channel) Gali atlikti visas CRUD operacijas su serveriais (Server)

Serverio administratorius

Gali atlikti visas CRUD operacijas su vartotojais (Users) (Savo serveriuos) Gali atlikti visas CRUD operacijas su žinutėmis (Messages) (Savo serveriuos) Gali atlikti visas CRUD operacijas su atsakymais (Reply) (Savo serveriuos) Gali atlikti visas CRUD operacijas su kanalais (Kanalais) (Savo serveriuos) Gali atlikti visas CRUD operacijas su su savo sukurtais serveriais

Paprastas vartotojas

Gali atlikti visas CRUD operacijas su žinutėmis (Messages) (Savo žinutėmis) Gali skaityti kitu vartotoju žinutės Gali matyti visus kanalus Gali matyti visus serverius Gali matyti kitus naudotojus (kanalo viduje)

Sistemos architektūra

Sistemos sudedamosios dalys:

  • Kliento pusė (angl. k. Front-End) – naudojant React.js;
  • Serverio pusė (angl. k. Back-End) – naudojant Koa (NodeJS). Duomenų bazė – PostgreSQL.

Apačioje pavaizduota kuriamos sistemos diegimo diagrama. Sistemos talpinimui yra naudojamas AWS serveris. Kiekviena sistemos dalis yra diegiama tame pačiame serveryje. Internetinė aplikacija yra pasiekiama per HTTP protokolą. Šios sistemos veikimui (pvz., duomenų manipuliavimui su duomenų baze) yra reikalingas ChatDot API, kuris pasiekiamas per aplikacijų programavimo sąsają. Pats ChatDot API vykdo duomenų mainus su duomenų baze - tam naudojama ORM sąsaja.

architecture.png

Naudotojo sąsajos projektas

Prisijungimo puslapis

login.png

Serverių sąrašo puslapis

servers.png

Serverio sukūrimo puslapis

server_add.png

Kanalų sąrašo puslapis

img.png

Kanalų sukūrimo puslapis

img.png

Žinučių sukūrimo puslapis

img.png

Specifinės žinutės puslapis

img.png

API specifikacija

  • Vartotojai

POST /users

Sukuriamas naujas vartotojas

Galimi atsako kodai

  • 201
  • 400

Panaudojimo pavyzdys

Užklausa
{
    "userName": "user1",
    "email": "[email protected]",
    "password": "user1",
    "role": 1
}
Atsakymas
{
    "userName": "user1",
    "email": "[email protected]",
    "role": 1,
    "password": "$2a$10$KyRHASbmaJX0vE.4FBmP2OUV9WIvgWzND9pgImsGsrJuN3ZWB1X2q",
    "id": "1bde2641-5473-476c-ba00-3261fe30b2f8"
}

POST /auth/login

Gaunamas JWT tokenas teisingai nurodžius vartotojo duomenis

Galimi atsako kodai

  • 200
  • 401
  • 404

Panaudojimo pavyzdys

Užklausa
{
    "userName": "user1",
    "password": "user1"
}
Atsakymas
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJlMjkwNjQ0MC1kODE2LTRiNTItOWM0OC04YjZjYzEwODMwN2QiLCJyb2xlIjoxLCJ1c2VyTmFtZSI6InNlcnZlciIsInRpbWUiOiJzdW4gZGVjIDE4IDIwMjIgMTY6MjI6NDUgZ210KzAwMDAgKGNvb3JkaW5hdGVkIHVuaXZlcnNhbCB0aW1lKSIsImlhdCI6MTY3MTM4MDU2NX0.8LAF-goFd_agjTkikvbBHDTBcq2osWznJyT0gu6Pe-4
  • Serveriai

POST /servers

Sukuriamas naujas serveris

Galimi atsako kodai

  • 201
  • 400
  • 401
  • 403

Panaudojimo pavyzdys

Užklausa
{
    "name": "serveris",
    "description": "aprašymas"
}
Atsakymas
{
    "id": "4ef3a785-5919-4e15-bc4e-312e771543ad",
    "adminId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
    "name": "serveris",
    "description": "aprašymas"
}

GET /servers/{id}

Pagal id gaunami serverio duomenys

Galimi atsako kodai

  • 200
  • 401
  • 404

Panaudojimo pavyzdys

Užklausa
GET /servers/4ef3a785-5919-4e15-bc4e-312e771543ad
Atsakymas
{
    "id": "4ef3a785-5919-4e15-bc4e-312e771543ad",
    "adminId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
    "name": "serveris",
    "description": "aprašymas"
}

PUT /servers/{id}

Atnaujinami serverio duomenys

Galimi atsako kodai

  • 201
  • 400
  • 401
  • 403
  • 404

Panaudojimo pavyzdys

Užklausa
PUT /servers/4ef3a785-5919-4e15-bc4e-312e771543ad

{
    "name": "serveris2",
    "description": "aprašymas2"
}
Atsakymas
{
    "id": "4ef3a785-5919-4e15-bc4e-312e771543ad",
    "adminId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
    "name": "serveris2",
    "description": "aprašymas2"
}

DELETE /servers/{id}

Ištrinamas serveris pagal id

Galimi atsako kodai

  • 204
  • 401
  • 403
  • 404

Panaudojimo pavyzdys

Užklausa
DELETE /servers/4ef3a785-5919-4e15-bc4e-312e771543ad
Atsakymas
204

GET /servers

Gaunamas visų serverių sąrašas

Galimi atsako kodai

  • 200
  • 401

Panaudojimo pavyzdys

Užklausa
GET /servers
Atsakymas
[
    {
        "id": "4ef3a785-5919-4e15-bc4e-312e771543ad",
        "adminId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
        "name": "serveris",
        "description": "aprašymas"
    }
]
  • Kanalai

POST /servers/{serverId}/channels

Serveryje pagal id sukuriamas naujas kanalas

Galimi atsako kodai

  • 201
  • 400
  • 401
  • 403

Panaudojimo pavyzdys

Užklausa
POST /servers/4ef3a785-5919-4e15-bc4e-312e771543ad/channels

{
    "name": "kanalas",
}
Atsakymas
{
    "id": "0286d937-4563-42d7-8273-e046693289b3",
    "name": "kanalas",
    "createdById": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
    "serverId": "fd618693-3dc0-41f3-926d-f21b46b266a7"
}

GET /servers/{serverId}/channels/{channelId}

Gaunami kanalo duomenus pagal id

Galimi atsako kodai

  • 200
  • 401
  • 404

Panaudojimo pavyzdys

Užklausa
GET /servers/0286d937-4563-42d7-8273-e046693289b3/channels/0286d937-4563-42d7-8273-e046693289b3
Atsakymas
{
    "id": "0286d937-4563-42d7-8273-e046693289b3",
    "name": "kanalas",
    "createdById": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
    "serverId": "fd618693-3dc0-41f3-926d-f21b46b266a7"
}

PUT /servers/{id}/channels/{channelId}

Atnaujinami kanalo duomenys

Galimi atsako kodai

  • 201
  • 400
  • 401
  • 403
  • 404

Panaudojimo pavyzdys

Užklausa
PUT /servers/0286d937-4563-42d7-8273-e046693289b3/channels/4ef3a785-5919-4e15-bc4e-312e771543ad

{
    "name": "kanalas2"
}
Atsakymas
{
    "id": "0286d937-4563-42d7-8273-e046693289b3",
    "name": "kanalas2",
    "createdById": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
    "serverId": "fd618693-3dc0-41f3-926d-f21b46b266a7"
}

DELETE /servers/{id}/channels/{channelId}

Ištrinamas kanalas

Galimi atsako kodai

  • 204
  • 401
  • 403
  • 404

Panaudojimo pavyzdys

Užklausa
DELETE /servers/0286d937-4563-42d7-8273-e046693289b3/channels/0286d937-4563-42d7-8273-e046693289b3
Atsakymas
204

GET /servers/{serverId}/channels

Gaunamas visų serverio pagal id kanalų sąrašas

Galimi atsako kodai

  • 200
  • 401

Panaudojimo pavyzdys

Užklausa
GET /servers/fd618693-3dc0-41f3-926d-f21b46b266a7/channels
Atsakymas
[
    {
        "id": "0286d937-4563-42d7-8273-e046693289b3",
        "name": "kanalas",
        "createdById": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9",
        "serverId": "fd618693-3dc0-41f3-926d-f21b46b266a7"
    }
]
  • Žinutės

POST /servers/{serverId}/channels/{channelId}/messages

Sukuriama pagal kanalo id nauja žinutė

Galimi atsako kodai

  • 201
  • 400
  • 401

Panaudojimo pavyzdys

Užklausa
POST /servers/4ef3a785-5919-4e15-bc4e-312e771543ad/channels/0286d937-4563-42d7-8273-e046693289b3/messages

{
    "content": "žinutė",
}
Atsakymas
{
    "id": "90cbb5ed-0e19-4b0f-bf32-b549e75ab85d",
    "content": "žinutė",
    "dateCreated": "2022-12-18T15:59:09.344Z",
    "dateUpdated": "2022-12-18T15:59:09.344Z",
    "channelId": "0286d937-4563-42d7-8273-e046693289b3",
    "authorId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9"
}

GET /servers/{serverId}/channels/{channelId}/messages/{messageId}

Gaunami žinutės duomenys pagal id

Galimi atsako kodai

  • 200
  • 401
  • 404

Panaudojimo pavyzdys

Užklausa
GET /servers/0286d937-4563-42d7-8273-e046693289b3/channels/0286d937-4563-42d7-8273-e046693289b3/messages/90cbb5ed-0e19-4b0f-bf32-b549e75ab85d
Atsakymas
{
    "id": "90cbb5ed-0e19-4b0f-bf32-b549e75ab85d",
    "content": "content",
    "dateCreated": "2022-12-18T15:59:09.344Z",
    "dateUpdated": "2022-12-18T15:59:09.344Z",
    "channelId": "0286d937-4563-42d7-8273-e046693289b3",
    "authorId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9"
}

PUT /servers/{id}/channels/{channelId}/messages/{messageId}

Atnaujinami žinutės duomenys

Galimi atsako kodai

  • 201
  • 400
  • 401
  • 403
  • 404

Panaudojimo pavyzdys

Užklausa
PUT /servers/0286d937-4563-42d7-8273-e046693289b3/channels/0286d937-4563-42d7-8273-e046693289b3/messages/90cbb5ed-0e19-4b0f-bf32-b549e75ab85d

{
    "name": "žinutė2"
}
Atsakymas
{
    "id": "90cbb5ed-0e19-4b0f-bf32-b549e75ab85d",
    "content": "žinutė2",
    "dateCreated": "2022-12-18T15:59:09.344Z",
    "dateUpdated": "2022-12-18T15:59:40.344Z",
    "channelId": "0286d937-4563-42d7-8273-e046693289b3",
    "authorId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9"
}

DELETE /servers/{id}/channels/{channelId}/messages/{messageId}

Ištrinama žinutė

Galimi atsako kodai

  • 204
  • 401
  • 403
  • 404

Panaudojimo pavyzdys

Užklausa
DELETE /servers/0286d937-4563-42d7-8273-e046693289b3/channels/0286d937-4563-42d7-8273-e046693289b3/messages/90cbb5ed-0e19-4b0f-bf32-b549e75ab85d
Atsakymas
204

GET /servers/{serverId}/channels/{channelId}/messages

Gaunamas kanalo pagal id žinučiu sąrašas

Galimi atsako kodai

  • 200
  • 401

Panaudojimo pavyzdys

Užklausa
GET /servers/fd618693-3dc0-41f3-926d-f21b46b266a7/channels/0286d937-4563-42d7-8273-e046693289b3/messages
Atsakymas
[
    {
        "id": "90cbb5ed-0e19-4b0f-bf32-b549e75ab85d",
        "content": "content",
        "dateCreated": "2022-12-18T15:59:09.344Z",
        "dateUpdated": "2022-12-18T15:59:09.344Z",
        "channelId": "0286d937-4563-42d7-8273-e046693289b3",
        "authorId": "d3c752bd-f03f-4a49-a626-f01ba5ea1ee9"
    }
]

Išvados

Galima teigti, kad Koa, PostgressSQL, Azure ir React yra tinkami įrankiai norint realizuoti paprastomis CRUD opeacijomis grįsta projektą. Taip pat JWT panaudojimas autentifikacijoje/autorizacijoje yra tinkamas sprendimas norint užtikrinti puslapio bei vartotojo duomenų saugumą.

chat_dot's People

Contributors

arnastam avatar

Watchers

 avatar

chat_dot's Issues

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.