##CrAc

##Endpoints

###Login-related

####THE CREDENTIALS (NAME AND PASSWORD) FOR ATHENTICATION MUST ALWAYS BE DELIVERED IN THE HEADER OF THE REQUEST AS BASIC AUTHENTICATION! If this is not the case, the server will just return an "unauthorized"-message! ####If the logged in user does not posses the rights for executing the method at a given endpoint, there will be a 403-message as return value. Eg.: A user without admin-rights tries to delete another user.


Get login response

#####Request:

GET /user/login

->the name and password have to be added in the header as the basic-authentication

#####Response:

If the name and password transferred in the header are correct:

{
	"user": "userName",
	"login": "true
}

else the standard unauthorized-message will appear:

{
	"status": 401, 
	"error": "Unauthorized"
}

###User-Functions


Get all users

#####Request:

GET /user

#####Response:

An array containing all users

[
	{
		"id": 1,
		"name": "testUser",
		...
	},
	{
		"id": 2,
		"name": "AnotherUser",
		...
	}
]

Get one user by ID

#####Request:

GET /user/{id}

#####Response:

A user object with given id

{
	"id": {id},
	"name": "searchedUser",
	...
}

Create a new user

#####Request:

POST /user

####This function requires ADMIN-rights!

{
    "name":"test",
    "password": "test",
    "role":"USER",
    "firstName":"TestHans",
    "lastName":"TestName",
    "phone":"234",
    "email":"asd@asd"
}

#####Response:

Json-data, either a success or a failure message


Delete a user with given ID

#####Request:

DELETE /user/{id} ####This function requires ADMIN-rights!

#####Response:

Json-data, either a success or a failure message


Update the data of a user with given ID

#####Request:

PUT /user/{id} ####This function requires ADMIN-rights!

Updates a user by given ID

{
    "name":"test",
    "password": "test",
    "role":"USER",
    "firstName":"TestHans",
    "lastName":"TestName",
    "phone":"234",
    "email":"asd@asd"
}

#####Response:

Json-data, either a success or a failure message


Get the data of the currently logged in user

#####Request:

GET /user/me

#####Response:

The object of the currently logged in user

{
	"id": 3,
	"name": "currentUser",
	...
}

Update the data of the currently logged in user

#####Request:

PUT /user/updateMe

Updates the currently logged in user

{
    "name":"currentUser",
    "password": "test",
    "role":"ADMIN",
    "firstName":"TestHans",
    "lastName":"TestName",
    "phone":"234",
    "email":"asd@asd"
}

#####Response:

Json-data, either a success or a failure message


###Competence-Endpoints on logged in user


Add a competence with given ID to the currently logged in user

#####Request:

GET user/addCompetence/{competence_id}

#####Response:

Json-data, either a success or a failure message


Remove a competence with given ID from the currently logged in user

#####Request:

GET user/removeCompetence/{competence_id}

#####Response:

Json-data, either a success or a failure message


###Task-Endpoints on logged in user


Add a task with given ID to the open-tasks (kind of the to-do list) of the logged in user

#####Request:

GET user/addTask/{task_id}

#####Response:

Json-data, either a success or a failure message


Removes the task with given id from the open-tasks of the currently logged in user

#####Request:

GET user/removeTask/{task_id}

#####Response:

Json-data, either a success or a failure message


Adds the task with given id to the followed-tasks of the currently logged in user

#####Request:

GET user/followTask/{task_id}

#####Response:

Json-data, either a success or a failure message


Removes the task with given id from the follow-tasks of the currently logged in user

#####Request:

GET user/unfollowTask/{task_id}

#####Response:

Json-data, either a success or a failure message


Adds the task with given id to the leading-tasks of the currently logged in user

#####Request:

GET user/leadTask/{task_id}

#####Response:

Json-data, either a success or a failure message


Removes the task with given id from the leading-tasks of the currently logged in user

#####Request:

GET user/abandonTask/{task_id}

#####Response:

Json-data, either a success or a failure message


###Project and Task-Endpoints

####PROJECT IS THE SUPER-TYPE TO A TASK User-Interaction happens on the task-level, but every task has to be assigned to a project. So while REST-functions on tasks are possible, it is highly recommended to use the other comfort functions for this, because of inconsistency reasons. Inconsistency producing REST-calls will also not be mentioned in this readme, they can be however looked up in the javadoc-documentation of the project if needed.

####First the endpoints of the projects themselves


Gets all projects

#####Request:

GET /project

#####Response:

An array containing all projects

[
	{
		"id": 1,
		"name": "testProject",
		"childTasks": [
			{
				"id": 1,
				"name": "testTask"
			},
			...
		],
		...
	},
	{
		"id": 2,
		"name": "AnotherProject",
		...
	}
]

Gets one project with given ID

#####Request:

GET /project/{project_id}

#####Response:

{
	"id": {id},
	"name": "searchedProject",
	childTasks": [
			{
				"id": 1,
				"name": "testTask"
			},
			...
		],
		...
	...
}

Creates a new project

#####Request:

POST /project

{
    "name": "testProject",
    "description": "this is a test",
    "location": "Vienna",
    "startTime": "2000-01-01T00:30:00",
    "endTime": "2000-01-01T01:00:00"
}

#####Response:

Json-data, either a success or a failure message


Deletes a project with given id

#####Request:

DELETE /project/{project_id} ####This function requires ADMIN-rights!

#####Response:

Json-data, either a success or a failure message


Updates the project with given id

#####Request:

PUT /project/{project_id} ####This function requires ADMIN-rights!

{
    "name": "testProject",
    "description": "this is a test",
    "location": "Vienna",
    "startTime": "2000-01-01T00:30:00",
    "endTime": "2000-01-01T01:00:00"
}

#####Response:

Json-data, either a success or a failure message


Creates a task and adds it to the given project.

#####Request:

POST /{project_id}/addTask

{
    "name": "testProject",
    "description": "this is a test",
    "location": "Vienna",
    "startTime": "2000-01-01T00:30:00",
    "endTime": "2000-01-01T01:00:00",
    "urgency": 4,
    "amountOfVolunteers": 25
}

#####Response:

Json-data, either a success or a failure message


Deletes a task by given id and removes it from the chosen project

#####Request:

DELETE /project/{project_id}/removeTask/{task_id} ####This function requires ADMIN-rights!

#####Response:

Json-data, either a success or a failure message


####The endpoints of tasks


Returns an array containing all tasks

#####Request:

GET /task

#####Response:

[
	{
		"id": 1,
		"name": "testTask",
		...
	},
	{
		"id": 2,
		"name": "AnotherTask",
		...
	}
]

Returns a project object with given id

#####Request:

GET /task/{task_id}

#####Response:

{
	"id": {task_id},
	"name": "searchedTask",
	...
}

Updates the task with given id

#####Request:

PUT /task/{task_id} ####This function requires ADMIN-rights!

{
    "name": "testTask",
    "description": "this is a test",
    "location": "Vienna",
    "startTime": "2000-01-01T00:30:00",
    "endTime": "2000-01-01T01:00:00"
    "urgency": 3,
    "amountOfVolunteers": 30
}

#####Response:

Json-data, either a success or a failure message


Adds a competence by given id to a task by given id

#####Request:

GET /task/{task_id}/addCompetence/{competence_id}

#####Response:

Json-data, either a success or a failure message


Adds or updated the feedback of a task

#####Request:

POST /task/{task_id}/addFeedback

{
	"feedback": "Some feedback"
}

#####Response:

Json-data, either a success or a failure message


Adds an attachment to a task by given ID

#####Request:

POST /task/{task_id}/addAttachment

####THIS IS NOT A JSON-REQUEST! The file has to be sent via a multipart-form. It then is copied to the server and added to the given task

#####Response:

Json-data, either a success or a failure message


Removes given attachment from given task and deletes the attached file from the server

#####Request:

DELETE /task/{task_id}/removeAttachment/{attachment_id}

#####Response:

Json-data, either a success or a failure message


Returns an array with all tasks that contain given task_name in their name

#####Request:

GET /task/getByName/{task_name}"

#####Response:

[
	{
		"id": 1,
		"name": "task_name",
		...
	},
	{
		"id": 2,
		"name": "x_task_name_y",
		...
	}
]

###Comment-handling


Creates and adds a comment to given task

#####Request:

POST /task/{task_id}/addComment

{
	"name": "testComment",
	"content": "this is test content"
}

#####Response:

Json-data, either a success or a failure message


Removes and deletes a given comment from a given task

#####Request:

DELETE /task/{task_id}/removeComment/{comment_id}

#####Response:

Json-data, either a success or a failure message


Returns all comments of given task as array

#####Request:

GET task/{task_id}/getComments

#####Response:

[
  {
    "id": 1,
    "name": "testComment",
    "content": "this is a comment",
    "task": 1
  },
  {
  	"id": 2,
  	...
  },
  ...
]

Completes a task by setting the boolean

#####Request:

GET task/{task_id}/complete

#####Response:

Json-data, either a success or a failure message


Un-completes a task by setting the boolean

#####Request:

GET task/{task_id}/notComplete

#####Response:

Json-data, either a success or a failure message


###Competence-Endpoints


Returns an array containing all competences

#####Request:

GET /competence

#####Response:

[
	{
		"id": 1,
		"name": "testCompetence",
		...
	},
	{
		"id": 2,
		"name": "AnotherCompetence",
		...
	}
]

Returns a user object with given id

#####Request:

GET /competence/{competence_id}

#####Response:

{
	"id": {competence_id},
	"name": "searchedCompetence",
	...
}

Creates a new competence

#####Request:

POST /competence

####This function requires ADMIN-rights!

{
    "name":"testCompetence",
    "description": "this is a competence"
}

#####Response:

Json-data, either a success or a failure message


Deletes competence by given ID

#####Request:

DELETE /competence/{competence_id} ####This function requires ADMIN-rights!

#####Response:

Json-data, either a success or a failure message


Updates a competence by given ID

#####Request:

PUT /competence/{competence_id} ####This function requires ADMIN-rights!

{
    "name":"testCompetence",
    "description": "this is a competence"
}

#####Response:

Json-data, either a success or a failure message


###Simple Taskfeed


Returns all Tasks, which neededCompetences match with the addedCompetences of the logged in user

#####Request:

GET /news

#####Response:

[
	{
		"id": 1,
		"name": "testTask",
		...
	},
	{
		"id": 2,
		"name": "AnotherTask",
		...
	}
]