FengoShujic / feng-shui-app

0 stars 0 forks source link

Промена структуре пројеката. #8

Open stefanlazarevic opened 6 months ago

stefanlazarevic commented 6 months ago

DB

Запис пројекта је идентичан запис угњежденог пројекта и ова два записа у суштини никада неће имати различите могућности. Предлажем у бази имамо само једну табелу под називом projects са следећим колонама.

Колона Тип Коментар
id UUID Примарни јединствени кључ и идентификатор пројекта.
parent_project_id Nullable(UUID) Показивач ка родитељском пројекту
name varchar(255) Назив пројекта који не мора бити јединствен
description Nullable(text) Опис пројекта

На овај начин, структура би подржавала неограничен број угњеждавања пројеката, па можемо имати

Рецепти
│
└───Ручак
    │
    └───Супе

Дакле, веза између пројеката је 1 - N (један пројекат може припадати само једном пројекту, а може их имати неограничено много)

API

Што се самих путања тиче, све путање везане за угњеждене пројекте (subproject) бих уклонио, а приступ подацима бих организовао путем следећих путања

Путања Параметар Опис Коментар
[GET] /projects Добављање свих пројеката без parent_project_id у одговор укључити само обавезна поља, односно она која не могу бити празна-null одговор сервера
fields=id,name У поље attributes укључити само наведена поља синоним за fields[projects]=id,name
include=projects У одговор укључити пројекте који су директна деца пројекта без parent_project_id

Одговор сервера

{
  "data": [
    {
      "type": "projects",
      "id": "b03929f4-1afb-4374-b383-1d93b661e176",
      "attributes": {
        "id": "b03929f4-1afb-4374-b383-1d93b661e176",
        "name": "Први пројекат"
      },
      "relationships": {
        "projects": {
          "data": [
            {
              "type": "projects",
              "id": "6fd40554-b2b3-4e7a-9c5d-c31b7b15b230",
              "attributes": {
                "id": "6fd40554-b2b3-4e7a-9c5d-c31b7b15b230",
                "name": "Први угњеждени пројекат"
              }
            }
          ]
        }
      }
    }
  ]
}
Путања Параметар Опис Коментар
[GET] /projects/:id Добављање пројекта чији id одговара примљеном у одговор укључити само обавезна поља, односно она која не могу бити празна-null одговор сервера
fields=name,description У поље attributes укључити само наведена поља синоним за fields[projects]=id,name
include=projects У одговор укључити пројекте који су директна деца пројекта

Одговор сервера

{
  "data": {
    "type": "projects",
    "id": "b03929f4-1afb-4374-b383-1d93b661e176",
    "attributes": {
      "name": "Први пројекат",
      "description": "Опис првог пројекта"
    },
    "relationships": {
      "projects": {
        "data": [
          {
            "type": "projects",
            "id": "6fd40554-b2b3-4e7a-9c5d-c31b7b15b230",
            "attributes": {
              "name": "Први угњеждени пројекат",
              "description": "Опис првог угњежденог пројекта"
            }
          }
        ]
      }
    }
  }
}