Projet10/README.md
2025-06-10 15:41:07 +02:00

5.6 KiB

OCR / DA Python - Project10

SoftDesk

Build a REST API using DjangoRestFramework

  • users, authors, contributors
  • projects/issues/comments

-> data models, user model, relations -> authentication

Introduction

These instructions allow you to :

  • get the program
  • install the required environment
  • run and use it

Requirements

  1. modules
packages : python 3.11, python3.11-venv, python3-pip, git

Installation

  1. Clone this repo and go in the project's directory

  2. Create the virtual environment

python3.11 -m venv env
source env/bin/activate
  1. install environment
pip install -r requirements.txt

Execution

  1. Go in the Django project directory
cd softdesk
  1. Initialize the database
python manage.py migrate
  1. Launch the test's server
python manage.py runserver

Usage

URL: http://127.0.0.1:8000

Authentication :

Without authentication (no token):

  • you can create a user
  • you can get the project's list

For any other action a token is required
To get details of a project you must be contributor

To create/get detail of issue or to create/get detail of comment you must be contributor to the project

User's management:

User create:

-> POST /api/user/create/
<- 201_CREATED ; 400_BAD_REQUEST

params:

{  
  "username": str,
  "email": str,
  "password": str,
  "password2": str,
  "age": int,
  "can_be_contacted": boolean,
  "can_data_be_shared": boolean
}

User info:

token required
-> GET /api/user/
<- 200_OK / data

User update:

token required
-> PATCH /api/user/
<- 201_CREATED; 400_BAD_REQUEST

params:

{  
  "email": str,
  "can_be_contacted": boolean,
  "can_data_be_shared": boolean
}

Password update:

-> GET /api/user/password-update/
<- 204_NO_CONTENT; 400_BAD_REQUEST

params:

{  
  "old_password": str,
  "new_password": str,
}

Delete a user

token required
-> DELETE /api/user/
<- 204_NO_CONTENT; 401_UNAUTHORIZED

params:

{  
  "user": str
}

Get token

-> POST /api/token/
<- 200_OK

params
{  
  "username": str,
  "password": str,
}

response
{
  "refresh": "xxxxx",
  "access": "xxxx"
}

Refresh token

-> POST /api/token/refresh/
<- 200_OK

params
{  
  "username": str,
  "password": str,
  "refresh": "xxxxxx"
}

response
{
  "refresh": "xxxxx",
  "access": "xxxx"
}

Project:

Retrieve the list of projects

-> GET /api/project/
<- 200_OK / data; 403_FORBIDDEN

querystrings

?contributor={user}
?author={user}

Create a project

-> POST /api/project/
<- 200_OK / data; 403_FORBIDDEN

params:

{  
  "title": str,
  "type": 
    "choices": [
          {
            "value": "BackEnd",
          },
          {
            "value": "FrontEnd",
          },
          {
            "value": "iOS",
          },
          {
            "value": "Android",
          },
  "description": str,
}

Get project's detail

token required
-> GET /api/project/{id}/
<- 200_OK / data; 403_FORBIDDEN

Update a project

token required
-> PATCH /api/project/{id}/
<- 200_OK / data; 403_FORBIDDEN

params:

{  
  "title": str,
  "type": 
    "choices": [
          {
            "value": "BackEnd",
          },
          {
            "value": "FrontEnd",
          },
          {
            "value": "iOS",
          },
          {
            "value": "Android",
          },
  "description": str,
}

Add a contributor to a project

token required

-> PATCH /api/project/{id}/contributor/
<- 202_ACCEPTED; 403_FORBIDDEN

params:

{
  "contributor": {username}
}

Delete a project

token required
-> DELETE /api/project/{id}/
<- 204_NO_CONTENT; 403_FORBIDDEN

Issue:

List issues (where requestor is contributor)

token required
-> GET /api/issue/
<- 200_OK

Create an issue

token required
-> POST /api/issue/
<- 201_CREATED / data; 403_FORBIDDEN

params:

{
  "title": str,
  "project": int,
  "description": str,
  "priority":
       "choices": [
          {
            "value": "Low",
          },
          {
            "value": "Medium",
          },
          {
            "value": "High",
          }
      ]
  "tag":        
        "choices": [
          {
            "value": "Bug",
          },
          {
            "value": "Feature",
          },
          {
            "value": "Task",
          }
        ]
  "status":  
        "choices": [
          {
            "value": "ToDo",
          },
          {
            "value": "In Progress",
          },
          {
            "value": "Finished",,
          }
        ]
}

Update an issue

token required
-> PATCH /api/issue/{id}/
<- 200_OK / data; 403_FORBIDDEN

/!\ Only the author of an issue can affect it
(update to another author)

Delete an issue

token required
-> DELETE /api/issue/{id}/
<- 204_NO_CONTENT; 403_FORBIDDEN

Retrieve contributors for a given issue

token required
-> GET /api/issue/{id}/contributors/
<- 200_OK; 403_FORBIDDEN

Comment:

Create a comment

token required
-> POST /api/comment/
<- 201_CREATED / data; 403_FORBIDDEN

params:

{
  "title": str,
  "issue": int,
  "description": str
}

Update a comment

token required
-> PATCH /api/comment/{id}/
<- 200_OK / data; 403_FORBIDDEN

Delete a comment

token required
-> DELETE /api/comment/{id}/
<- 204_NO_CONTENT; 403_FORBIDDEN


Author

YaL yann@needsome.coffee

License

MIT License
Copyright (c) 2025