Skip to content
Snippets Groups Projects

Feeding chicken with chicken

Merged Marc Feger requested to merge feedingChickenWithChicken into main
1 file
+ 256
280
Compare changes
  • Side-by-side
  • Inline
+ 256
280
@@ -47,7 +47,7 @@ Create the database with
@@ -47,7 +47,7 @@ Create the database with
and start the server with
and start the server with
> python manage.py runserver
> python manage.py runserver
the following page should showup if you open [http://127.0.0.1:8000/](http://127.0.0.1:8000/) in your browser.
the default django information page should showup if you open [http://127.0.0.1:8000/](http://127.0.0.1:8000/) in your browser.
## Request API for the URLs
## Request API for the URLs
@@ -56,340 +56,316 @@ For authorization use the header name "Authorization" and the value "Token <toke
@@ -56,340 +56,316 @@ For authorization use the header name "Authorization" and the value "Token <toke
#### Authentication
#### Authentication
##### POST url: ".../authentication/register/"
##### POST url: ".../authentication/register/"
Register a user
Register a user
Requestbody:
Requestbody:
{
{
"username": "username",
"username": "username",
"password": "password",
"password": "password",
"email": "
"email": "email"
}
}
Responsebody:
Responsebody:
{
{
"token": "token"
"token": "token"
}
}
##### POST url: ".../authentication/login/"
##### POST url: ".../authentication/login/"
Login a user
Login a user
Requestbody:
Requestbody:
{
{
"username": "username",
"username": "username",
"password": "password"
"password": "password"
}
}
Responsebody:
Responsebody:
{
{
"token": "token"
"token": "token"
}
}
##### POST url: ".../authentication/logout/"
##### POST url: ".../authentication/logout/"
Logout a user
Logout a user
Requestbody: None
Requestbody: None
Responsebody: None
Responsebody: None
Success: HTTP/200
Success: HTTP/200
##### GET url: ".../authentication/validate/"
##### GET url: ".../authentication/validate/"
Validate a token
Validate a token
Requestbody: None
Responsebody: None
Success: HTTP/200
Requestbody: None
 
Responsebody: None
 
Success: HTTP/200
#### Account
#### Account
##### GET url: ".../accounts/show/<user_id>/"
##### GET url: ".../accounts/show/<user_id>/"
Show a public user
Show a public user
Requestbody: None
Requestbody: None
Responsebody:
Responsebody:
[{
[{
"user": {
"user": {
"id": ...,
"id": ...,
"username": ...,
"username": ...,
"email": ...,
"email": ...,
"date_joined": "..."
"date_joined": "..."
},
},
"image": "...",
"image": "...",
"biography": "...",
"biography": "...",
"related_by": [],
"related_by": [],
"related_to": [],
"related_to": [],
"statements": []
"statements": []
}]
}]
##### GET url: ".../accounts/show/own/"
##### GET url: ".../accounts/show/own/"
Show the own user
Show the own user
Requestbody: None
Requestbody: None
Responsebody:
Responsebody:
[{
[{
"user": {
"user": {
"id": ...,
"id": ...,
"username": ...,
"username": ...,
"email": ...,
"email": ...,
"date_joined": "..."
"date_joined": "..."
},
},
"image": "...",
"image": "...",
"biography": "...",
"biography": "...",
"related_by": [],
"related_by": [],
"related_to": [],
"related_to": [],
"statements": []
"statements": []
}]
}]
##### GET url: ".../accounts/show/all/"
##### GET url: ".../accounts/show/all/"
Show all public users
Show all public users
Requestbody: None
Requestbody: None
Responsebody:
Responsebody:
[{
[{
"user": {
"user": {
"id": ...,
"id": ...,
"username": ...,
"username": ...,
"email": ...,
"email": ...,
"date_joined": "..."
"date_joined": "..."
},
},
"image": "...",
"image": "...",
"biography": "...",
"biography": "...",
"related_by": [],
"related_by": [],
"related_to": [],
"related_to": [],
"statements": []
"statements": []
},
},
...
...
]
]
##### PUT url: ".../accounts/update/"
##### PUT url: ".../accounts/update/"
Updates the own account. Only "Biography" and "Image" are allowed to be updated.
Updates the own account. Only "Biography" and "Image" are allowed to be updated.
Requestbody:
Requestbody:
{
{
"biography": "...",
"biography": "...",
"file": "..."
"file": "..."
}
}
Responsebody: None
Responsebody: None
Success: HTTP/200
Success: HTTP/200
##### PUT url: ".../accounts/follow/<user_id>/"
##### PUT url: ".../accounts/follow/<user_id>/"
Follow a user
Follow a user
Requestbody: None
Responsebody: None
Success: HTTP/200
Requestbody: None
 
Responsebody: None
 
Success: HTTP/200
##### PUT url: ".../accounts/unfollow/<user_id>/"
##### PUT url: ".../accounts/unfollow/<user_id>/"
Unfollow a user
Unfollow a user
Requestbody: None
Requestbody: None
Responsebody: None
Responsebody: None
Success: HTTP/200
Success: HTTP/200
##### PUT url: ".../accounts/operation/add/statement/"
##### PUT url: ".../accounts/operation/add/statement/"
Add a statement to the own account
Add a statement to the own account
Requestbody:
Requestbody:
{
{
"input": "<statement>"
"input": "<statement>"
"reactions": { "to": <reaction_to_a_statement_id>, "relation": <"attack" or "support">} <--- optional
"reactions": { "to": <reaction_to_a_statement_id>, "relation": <"attack" or "support">} <--- optional
}
}
Responsebody:
Responsebody:
{
{
"id": ...,
"id": ...,
"author": {
"author": {
"user": {
"user": {
"id": ...,
"id": ...,
"username": "..."
"username": "..."
},
},
"image": "..."
"image": "..."
},
},
"content": "...",
"content": "...",
"tagged": [],
"tagged": [],
"mentioned": [],
"mentioned": [],
"created": "...",
"created": "...",
"relation_to_parent": ...
"relation_to_parent": ...
}
}
Success: HTTP/200
Success: HTTP/200
#### Contents
#### Contents
##### GET url: ".../contents/statements/get/<statement_id>/"
##### GET url: ".../contents/statements/get/<statement_id>/"
Get a statement
Get a statement
Requestbody: None
Requestbody: None
Responsebody:
Responsebody:
[
[
{
{
"id": ...,
"id": ...,
"author": {
"author": {
"user": {
"user": {
"id": ...,
"id": ...,
"username": "..."
"username": "..."
},
},
"image": "..."
"image": "..."
},
},
"content": "...",
"content": "...",
"tagged": [],
"tagged": [],
"mentioned": [],
"mentioned": [],
"created": "...",
"created": "...",
"relation_to_parent": ...,
"relation_to_parent": ...,
"reactions": []
"reactions": []
}
}
]
]
##### GET url: ".../contents/statements/with/hashtag/"
##### GET url: ".../contents/statements/with/hashtag/"
Get all statements with a hashtag
Get all statements with a hashtag
Requestbody: None
Requestbody: None
Queryparameters: "?q=<hashtag>"
Queryparameters: "?q=<hashtag>"
Responsebody:
[
Responsebody:
{
[
"id": ...,
{
"author": {
"id": ...,
"user": {
"author": {
"id": ...,
"user": {
"username": "..."
"id": ...,
},
"username": "..."
"image": "..."
},
},
"image": "..."
"content": "...",
},
"tagged": [],
"content": "...",
"mentioned": [],
"tagged": [],
"created": "...",
"mentioned": [],
"relation_to_parent": ...,
"created": "...",
"reactions": []
"relation_to_parent": ...,
},
"reactions": []
...
},
]
...
]
##### GET url: ".../contents/statements/feed/"
##### GET url: ".../contents/statements/feed/"
Get all statements of the accounts that are followed by the user
Get all statements of the accounts that are followed by the user
Requestbody: None
Requestbody: None
Responsebody:
Responsebody:
[
[
{
{
"id": ...,
"id": ...,
"author": {
"author": {
"user": {
"user": {
"id": ...,
"id": ...,
"username": "..."
"username": "..."
},
},
"image": "..."
"image": "..."
},
},
"content": "...",
"content": "...",
"tagged": [],
"tagged": [],
"mentioned": [],
"mentioned": [],
"created": "...",
"created": "...",
"relation_to_parent": ...,
"relation_to_parent": ...,
"reactions": []
"reactions": []
},
},
...
...
]
]
##### GET url: ".../contents/trending/hashtag/"
##### GET url: ".../contents/trending/hashtag/"
Get all trending hashtags which are most used in statements
Get all trending hashtags which are most used in statements
Requestbody: None
Reponsebody: ++++++ TODO: Setting of a hashtag not clear ++++++
Requestbody: None
 
Reponsebody: ++++++ TODO: Setting of a hashtag not clear ++++++
#### Search
#### Search
##### GET url: ".../search/"
##### GET url: ".../search/"
Searchs for a user or hashtag
Searchs for a user or hashtag
Requestbody: None
Requestbody: None
Queryparameters: "?q=<search_query>&filter=<"user" or "hashtag">"
Queryparameters: "?q=<search_query>&filter=<"user" or "hashtag">"
Responsebody:
{
Responsebody:
"accounts": [
{
{
"accounts": [
"user": {
{
"id": ...,
"user": {
"username": "...",
"id": ...,
},
"username": "...",
"image": "..."
},
},
"image": "..."
...
},
],
...
"hashtags": [
],
{
"hashtags": [
"id": ...,
{
"tag": "..."
"id": ...,
},
"tag": "..."
...
},
]
...
}
]
}
## Core Database structure
## Core Database structure
The project requieres the base authentication database structure from django and extends it with the following tables:
The project requieres the base authentication database structure from django and extends it with the following tables:
1. "the_social_network_account"
1. "the_social_network_account"
with:
with
user_id: int as primary key and foreign key to django auth_user
user_id: int as primary key and foreign key to django auth_user
image: varchar(100)
image: varchar(100)
biography: varchar(1000)
biography: varchar(1000)
2. "the_social_network_statement"
2. "the_social_network_statement"
with:
with
id: int as primary key
id: int as primary key
author_id: int as foreign key to the_social_network_account
author_id: int as foreign key to the_social_network_account
content: varchar(120)
content: varchar(120)
created: datetime
created: datetime
3. "the_social_network_accounttagging"
3. "the_social_network_accounttagging"
with:
with
id: int as primary key
id: int as primary key
created: datetime
created: datetime
account_id: int as foreign key to the_social_network_account
account_id: int as foreign key to the_social_network_account
statement_id: int as foreign key to the_social_network_statement
statement_id: int as foreign key to the_social_network_statement
4. "the_social_network_hashtag"
4. "the_social_network_hashtag"
with:
with
id: int as primary key
id: int as primary key
tag: varchar(30)
tag: varchar(30)
created: datetime
created: datetime
5. "the_social_network_hashtagtagging"
5. "the_social_network_hashtagtagging"
with:
with
id: int as primary key
id: int as primary key
created: datetime
created: datetime
hashtag_id: int as foreign key to the_social_network_hashtag
hashtag_id: int as foreign key to the_social_network_hashtag
statement_id: int as foreign key to the_social_network_statement
statement_id: int as foreign key to the_social_network_statement
6. "the_social_network_reaction"
6. "the_social_network_reaction"
with:
with
id: int as primary key
id: int as primary key
created: datetime
created: datetime
vote: small uint
vote: small uint
child_id: int as foreign key to the_social_network_statement
child_id: int as foreign key to the_social_network_statement
parent_id: int as foreign key to the_social_network_statement
parent_id: int as foreign key to the_social_network_statement
7. "the_social_network_relationship"
7. "the_social_network_relationship"
with:
with
id: int as primary key
id: int as primary key
created: datetime
created: datetime
from_account_id: int as foreign key to the_social_network_account
from_account_id: int as foreign key to the_social_network_account
to_account_id: int as foreign key to the_social_network_account
to_account_id: int as foreign key to the_social_network_account
Loading