# User management

User information:

  Name                Unique, no space, at least one letter
  Avatar              Stored in a server folder. Size limit?
  Password            Hashed, of course
  Email               Mail address, used to send newsletters

  Points              Participation measure (mainly number of posts)
  Innovation points   A different kind of participation measure

  Biography           Description of the user
  Signature           Short signature added at the end of every post
  Birthday            Birthday date

  Newsletter          Subscription to newsletter
  Settings...

Relations:

  Notifications       1 to many
  Groups              1 to many
  Sent PMs            1 to many
  Received PMs        1 to many
  Trophies/Titles     1 to many

  All posts           many to many (tutorials can have several authors)
  Privileges          many to many

Rest API for users:
  Requests where "Search" is set to "Yes" accept search patterns. The syntax
  needs to be chosen, it could be something like "/users[name~=/*storm*/i]".

  Method  URL                    Search    Description
  -----------------------------------------------------------------------------
  GET     /users                 Yes       Query users
  -----------------------------------------------------------------------------
  GET     /users/<id>            -         Get user information/settings
  PATCH   /users/<id>            -         Update user information/settings
  -----------------------------------------------------------------------------
  GET     /users/<id>/trophies   -         Get unlocked trophies
  -----------------------------------------------------------------------------
  GET     /users/<id>/messages   Yes       Query private messages
  POST    /users/<id>/messages   -         Send PM (<id> is sender)
  DELETE  /users/<id>/messages   Required  Delete PMs matching pattern
  -----------------------------------------------------------------------------
  GET     /users/<id>/groups     -         Get user groups
  -----------------------------------------------------------------------------
  GET     /users/<id>/privs      -         Get user privileges
  -----------------------------------------------------------------------------

  Updating the participation scores is not a request, it's tied to posting
  contents, so it has nothing to do in the API.

  (*) Not sure if this is relevant, since these are administrator duties.

Rest API for groups:

  Method  URL                    Search    Description
  -----------------------------------------------------------------------------
  GET     /groups                -         Get list of groups
  GET     /groups/<id>           -         Get list of users in groups
  -----------------------------------------------------------------------------

  There are no methods to change the privileges associated to each groups
  because this task is clearly for administrators, not API users.
