/medialine-test

Test task

Primary LanguagePHPBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

DIRECTORY STRUCTURE

  assets/             contains assets definition
  commands/           contains console commands (controllers)
  config/             contains application configurations
  controllers/        contains Web controller classes
  mail/               contains view files for e-mails
  models/             contains model classes
  modules/             contains modules classes
  runtime/            contains files generated during runtime
  tests/              contains various tests for the basic application
  vendor/             contains dependent 3rd-party packages
  views/              contains view files for the Web application
  web/                contains the entry script and Web resources

REQUIREMENTS

The minimum requirement by this project template that your Web server supports PHP 5.6.0.

CONFIGURATION

Database

Edit the file config/db.php with real data, for example:

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=medialine',
    'username' => 'root',
    'password' => '1234',
    'charset' => 'utf8',
];

INSTALLATION

Run migration command

yii migrate

NOTES:

  • Yii won't create the database for you, this has to be done manually before you can access it.
  • Check and edit the other files in the config/ directory to customize your application as required.

Routes

Categories

  • domain.com/api/categories | List of all cateogories
  • domain.com/api/categories/create | for creating new category
  • domain.com/api/categories/update | for updating category
  • domain.com/api/categories/delete | for deleting category

Articles

  • domain.com/api/articles | List of all articles
  • domain.com/api/articles/create | for creating new article
  • domain.com/api/articles/update | for updating article
  • domain.com/api/articles/delete | for deleting article

domain.com/api/categories

Request method: POST | GET
Response type: JSON (List of categories returns recursive by parent)

[
   {
      "id":"9",
      "title":"Спорт",
      "parent_id":null,
      "created_at":"2021-02-04 16:38:12",
      "updated_at":null
   },
   {
      "id":"4",
      "title":"День города",
      "parent_id":null,
      "created_at":"2021-02-04 16:35:53",
      "updated_at":null,
      "children":[
         {
            "id":"6",
            "title":"Детская площадка",
            "parent_id":"4",
            "created_at":"2021-02-04 16:37:34",
            "updated_at":null,
            "children":[
               {
                  "id":"7",
                  "title":" 0-3 года",
                  "parent_id":"6",
                  "created_at":"2021-02-04 16:38:00",
                  "updated_at":null
               }
            ]
         },
         {
            "id":"5",
            "title":"Cалюты",
            "parent_id":"4",
            "created_at":"2021-02-04 16:36:59",
            "updated_at":null
         }
      ]
   }
]

domain.com/api/categories/create

Request method: POST

{
    "title": "Test",
    "parent_id": 2
}

Response type: JSON (Result, if all is ok will add id of new category)

if success:

{
    "result": true,
    "id": 10
}

if any error:

{
    "result": false
}

domain.com/api/categories/update

Request method: POST

{
    "id": 10,
    "title": "Tested",
    "parent_id": 2
}

Response type: JSON (Result, if all is ok will add id of new category)

if success:

{
    "result": true,
    "id": 10
}

if any error:

{
  "result": false,
  "message": "Category not found"
}

domain.com/api/categories/delete

Request method: POST

{
    "id": 10
}

Response type: JSON

if success:

{
    "result": true
}

if any error:

{
  "result": false,
  "message": "Category not found"
}

domain.com/api/articles

Request method: POST | GET
Response type: JSON

[
  {
    "id": "1",
    "title": "Test",
    "body": "Tested test Tested test Tested test Tested test Tested test Tested test Tested test Tested test Tested test ",
    "created_at": "2021-02-04 18:43:13",
    "updated_at": null,
    "article_id": null,
    "categories": null
  },
  {
    "id": "18",
    "title": "Test #2",
    "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
    "created_at": "2021-02-05 10:16:47",
    "updated_at": null,
    "article_id": "18",
    "categories": "Общество,Городская жизнь, 0-3 года"
  }
]

domain.com/api/articles/category

Request method: POST

{
    "id": 1
}

Response type: JSON (List of all articles belongs to category)
You must set category id to id field

[
    {
        "id": "18",
        "title": "Test #2",
        "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
        "created_at": "2021-02-05 10:16:47",
        "updated_at": null,
        "article_id": "18",
        "categories": "Общество,3-7 года,Выборы,Test"
    }
]

domain.com/api/articles/create

Request method: POST

{
  "title": "Test #3",
  "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "category": "5,8,9,7"
}

Response type: JSON (Result, if all is ok will add id of new article)

if success:

{
    "result": true,
    "id": 10
}

if any error:

{
    "result": false
}

domain.com/api/articles/update

Request method: POST

{
  "id": 18,
  "title": "Test #2",
  "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "category": "1,2,7"
}

Response type: JSON (Result, if all is ok will add id of new category)

if success:

{
    "result": true
}

if any error:

{
  "result": false,
  "message": "Article not found"
}

domain.com/api/articles/delete

Request method: POST

{
    "id": 10
}

Response type: JSON

if success:

{
    "result": true
}

if any error:

{
  "result": false,
  "message": "Article not found"
}