Skip to content

ryanmphill/wilder-watch-server

Repository files navigation

GitHub Workflow Status (with event)

Wilder Watch API

This is the RESTful API intended for use in production with the WilderWatch Client built with Python, Django, and Django REST Framework.

Note: If you are interested in pulling the wilder-watch-api down to run locally, you will need to use the demo version that uses a generic SECRET_KEY for development purposes

Click here for WilderWatch demo server

API Url

https://wilder-watch-api-iknch.ondigitalocean.app/

Endpoints

Authentication

POST /login

Authenticates an existing user

Body:

{
    "username": "string",
    "password": "string"
}

Response 200:

{
    "valid": "boolean",
    "token": "string"
}

POST /register

Registers a new user

Body:

{
    "username": "string",
    "password": "string",
    "email": "string",
    "first_name": "string",
    "last_name": "string"
}

Response 200:

{
    "valid": "boolean",
    "token": "string"
}

Regions

GET /regions

Retrieves all regions

Response 200:

[
    {
    "id": "integer",
    "label": "string"
    },
    {
    "id": "integer",
    "label": "string"
    },
]

GET /regions/{pk}

Retrieves single region

Response 200:

{
    "id": "integer",
    "label": "string"
}

Study Types

GET /study_types

Retrieves all study types

Response 200:

[
    {
    "id": "integer",
    "label": "string"
    },
    {
    "id": "integer",
    "label": "string"
    },
]

GET /study_types/{pk}

Retrieves single study type

Response 200:

{
    "id": "integer",
    "label": "string"
}

Studies

GET /studies

Retrieves all studies

Response 200:

[
    {
        "id": "integer",
        "title": "string",
        "author": {
            "id": "integer",
            "user": {
                "id": "integer",
                "username": "string",
                "first_name": "string",
                "last_name": "string",
                "is_staff": "boolean"
            },
            "bio": "string",
            "flair": "string",
            "image_url": "string",
            "is_researcher": "boolean",
            "full_name": "string"
        },
        "subject": "string",
        "summary": "string",
        "details": "string",
        "start_date": "date",
        "end_date": "date",
        "is_complete": "boolean",
        "study_type": {
            "id": "integer",
            "label": "string"
        },
        "region": {
            "id": "integer",
            "label": "string"
        },
        "image_url": "string",
        "observations": [
            {
                "id": "integer",
                "participant": "integer",
                "study": "integer",
                "latitude": "float",
                "longitude": "float",
                "description": "string",
                "image": "string",
                "date": "date",
                "participant_name": "string",
                "study_title": "string"
            }
        ],
        "average_longitude": "float",
        "average_latitude": "float",
        "furthest_longitude": "float",
        "furthest_latitude": "float"
    },
]

GET /studies/{pk}

Retrieves single study

Response 200:

{
        "id": "integer",
        "title": "string",
        "author": {
            "id": "integer",
            "user": {
                "id": "integer",
                "username": "string",
                "first_name": "string",
                "last_name": "string",
                "is_staff": "boolean"
            },
            "bio": "string",
            "flair": "string",
            "image_url": "string",
            "is_researcher": "boolean",
            "full_name": "string"
        },
        "subject": "string",
        "summary": "string",
        "details": "string",
        "start_date": "date",
        "end_date": "date",
        "is_complete": "boolean",
        "study_type": {
            "id": "integer",
            "label": "string"
        },
        "region": {
            "id": "integer",
            "label": "string"
        },
        "image_url": "string",
        "observations": [
            {
                "id": "integer",
                "participant": "integer",
                "study": "integer",
                "latitude": "float",
                "longitude": "float",
                "description": "string",
                "image": "string",
                "date": "date",
                "participant_name": "string",
                "study_title": "string"
            }
        ],
        "average_longitude": "float",
        "average_latitude": "float",
        "furthest_longitude": "float",
        "furthest_latitude": "float"
    }

POST /studies

Creates a new study

Headers:

"Authorization": "Token <Auth token goes here>"

Body:

{
        "title": "string",
        "subject": "string",
        "summary": "string",
        "details": "string",
        "startDate": "date",
        "endDate": "date",
        "studyTypeId": "integer",
        "regionId": "integer",
        "imageUrl": "string"
}

Response 201 Created:

{
        "id": "integer",
        "title": "string",
        "author": {
            "id": "integer",
            "user": {
                "id": "integer",
                "username": "string",
                "first_name": "string",
                "last_name": "string",
                "is_staff": "boolean"
            },
            "bio": "string",
            "flair": "string",
            "image_url": "string",
            "is_researcher": "boolean",
            "full_name": "string"
        },
        "subject": "string",
        "summary": "string",
        "details": "string",
        "start_date": "date",
        "end_date": "date",
        "is_complete": "boolean",
        "study_type": {
            "id": "integer",
            "label": "string"
        },
        "region": {
            "id": "integer",
            "label": "string"
        },
        "image_url": "string",
        "observations": [
            {
                "id": "integer",
                "participant": "integer",
                "study": "integer",
                "latitude": "float",
                "longitude": "float",
                "description": "string",
                "image": "string",
                "date": "date",
                "participant_name": "string",
                "study_title": "string"
            }
        ],
        "average_longitude": "float",
        "average_latitude": "float",
        "furthest_longitude": "float",
        "furthest_latitude": "float"
    }

PUT /studies/{pk}

Updates an existing study

Headers:

"Authorization": "Token <Auth token goes here>"

Body:

{
        "title": "string",
        "subject": "string",
        "summary": "string",
        "details": "string",
        "startDate": "date",
        "endDate": "date",
        "studyTypeId": "integer",
        "regionId": "integer",
        "imageUrl": "string"
}

Response: 204 No Content

DELETE /studies/{pk}

Deletes an existing study

Headers:

"Authorization": "Token <Auth token goes here>"

Response: 204 No Content

POST /studies/{pk}/add_observation

Adds an observation to an existing study

Headers:

"Authorization": "Token <Auth token goes here>"

Body:

{
    "latitude": "float",
    "longitude": "float",
    "description": "string",
    "image": "string",
    "date": "date"
}

Response 201 Created:

{
    "id": "integer",
    "participant": "integer",
    "study": "integer",
    "latitude": "float",
    "longitude": "float",
    "description": "string",
    "image": "string",
    "date": "date",
    "participant_name": "string",
    "study_title": "string"
}

Users

GET /users

Retrieves all users

Response 200:

[
    {
        "id": "integer",
        "user": {
            "id": "integer",
            "username": "string",
            "first_name": "string",
            "last_name": "string",
            "is_staff": "boolean"
        },
        "bio": "string",
        "flair": "string",
        "image_url": "string",
        "is_researcher": "boolean",
        "full_name": "string"
    },
]

GET /users/{pk}

Retrieves single user

Response 200:

{
        "id": "integer",
        "user": {
            "id": "integer",
            "username": "string",
            "first_name": "string",
            "last_name": "string",
            "is_staff": "boolean"
        },
        "bio": "string",
        "flair": "string",
        "image_url": "string",
        "is_researcher": "boolean",
        "full_name": "string"
}

GET /users/{pk}/participated_studies

Retrieves all studies that a user has participated in

Response 200:

[
    {
        "id": "integer",
        "title": "string",
        "author": {
            "id": "integer",
            "user": {
                "id": "integer",
                "username": "string",
                "first_name": "string",
                "last_name": "string",
                "is_staff": "boolean"
            },
            "bio": "string",
            "flair": "string",
            "image_url": "string",
            "is_researcher": "boolean",
            "full_name": "string"
        },
        "subject": "string",
        "summary": "string",
        "details": "string",
        "start_date": "date",
        "end_date": "date",
        "is_complete": "boolean",
        "study_type": {
            "id": "integer",
            "label": "string"
        },
        "region": {
            "id": "integer",
            "label": "string"
        },
        "image_url": "string",
        "observations": [
            {
                "id": "integer",
                "participant": "integer",
                "study": "integer",
                "latitude": "float",
                "longitude": "float",
                "description": "string",
                "image": "string",
                "date": "date",
                "participant_name": "string",
                "study_title": "string"
            }
        ],
        "average_longitude": "float",
        "average_latitude": "float",
        "furthest_longitude": "float",
        "furthest_latitude": "float"
    },
]

GET /users/{pk}/authored_studies

Retrieves all studies that a user has authored

Response 200:

[
    {
        "id": "integer",
        "title": "string",
        "author": {
            "id": "integer",
            "user": {
                "id": "integer",
                "username": "string",
                "first_name": "string",
                "last_name": "string",
                "is_staff": "boolean"
            },
            "bio": "string",
            "flair": "string",
            "image_url": "string",
            "is_researcher": "boolean",
            "full_name": "string"
        },
        "subject": "string",
        "summary": "string",
        "details": "string",
        "start_date": "date",
        "end_date": "date",
        "is_complete": "boolean",
        "study_type": {
            "id": "integer",
            "label": "string"
        },
        "region": {
            "id": "integer",
            "label": "string"
        },
        "image_url": "string",
        "observations": [
            {
                "id": "integer",
                "participant": "integer",
                "study": "integer",
                "latitude": "float",
                "longitude": "float",
                "description": "string",
                "image": "string",
                "date": "date",
                "participant_name": "string",
                "study_title": "string"
            }
        ],
        "average_longitude": "float",
        "average_latitude": "float",
        "furthest_longitude": "float",
        "furthest_latitude": "float"
    },
]

About

Server side for WiderWatch wildlife geotracking project. Built with Python/Django and features automated testing for quality assurance.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors