Table of Contents

Class UserController

Namespace
GastroSky.Controllers.V1
Assembly
GastroSky.dll

User related endpoints.

[ApiController]
[Authorize]
[Route("api/v1/users")]
[Produces("application/json", new string[] { })]
public class UserController : GastroSkyControllerBase
Inheritance
UserController
Inherited Members

Constructors

UserController(GastroSkyDatabaseContext, IEmailValidator, IPasswordHashing, ISlugGenerator, IMapper, IConfiguration, IRemoteFileStorage, ILogger<UserController>, IImageManipulationService)

User related endpoints.

public UserController(GastroSkyDatabaseContext db, IEmailValidator emailValidator, IPasswordHashing passwordHashing, ISlugGenerator slugGenerator, IMapper mapper, IConfiguration configuration, IRemoteFileStorage remoteFileStorage, ILogger<UserController> logger, IImageManipulationService imageManipulationService)

Parameters

db GastroSkyDatabaseContext
emailValidator IEmailValidator
passwordHashing IPasswordHashing
slugGenerator ISlugGenerator
mapper IMapper
configuration IConfiguration
remoteFileStorage IRemoteFileStorage
logger ILogger<UserController>
imageManipulationService IImageManipulationService

Methods

CreateUser(UserCreationRequestDto)

Creates a new user manually.

[HttpPost]
[Route("")]
[Authorize(Policy = "https://api.gastrosky.ch/identity/claims/resources/users:W")]
[ProducesResponseType(400)]
[ProducesResponseType(403)]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
[ProducesResponseType<ResponseBodyDto<UserResponseDto>>(201)]
public Task<IActionResult> CreateUser(UserCreationRequestDto dto)

Parameters

dto UserCreationRequestDto

Request DTO containing the new user account details. Check out the API DocFX documentation on UserCreationRequestDto for more information.

Returns

Task<IActionResult>

IActionResult

Remarks

Sample request: ( profilePictureBytesBase64 example string is NOT a valid image format! )

POST /api/v1/users
{
  "email": "maria@example.com",
  "passwordHashSHA256": "d75a838dc758ba17f28bd8dbac605cb70c35465263d5733164521de2f7ef7926",
  "slug": "mariab",
  "name": "Maria Bernasconi",
  "phone": "+41 79 000 00",
  "address": "Via Fuori dai Coglioni",
  "zipCode": "6969",
  "location": "Diocane",
  "countryCodeISO": "XYZ",
  "websiteURL": "https://reddit.com",
  "profilePictureBytesBase64": "bm90IGFuIGltYWdlIGZmcy4uLg==",
  "language": 0,
  "claims": [
    {
      "resource": "https://gastrosky.ch/identity/claims/resources/posts",
      "accessType": 1
    },
    {
      "resource": "https://gastrosky.ch/identity/claims/resources/companies",
      "accessType": 3
    }
  ]
}

GetActiveUserSubscriptions()

[HttpGet]
[Route("active-subscriptions")]
[ProducesResponseType(404)]
[ProducesResponseType<ResponseBodyDto<ActiveSubscriptionResponseDto>>(200)]
public Task<IActionResult> GetActiveUserSubscriptions()

Returns

Task<IActionResult>

GetInvites()

[HttpGet]
[Route("invites")]
[ProducesResponseType<ResponseBodyDto<UserCompanyResponseDto>>(200)]
public Task<IActionResult> GetInvites()

Returns

Task<IActionResult>

GetUser(string)

Gets a specific user's information.

[HttpGet]
[Route("{slug}")]
[Authorize(Policy = "https://api.gastrosky.ch/identity/claims/resources/users:R")]
[ProducesResponseType<ResponseBodyDto<UserResponseDto>>(200)]
[ProducesResponseType(403)]
public Task<IActionResult> GetUser(string slug)

Parameters

slug string

The user's slug string.

Returns

Task<IActionResult>

IActionResult

See Also

GetUserProPic(string)

[HttpGet]
[Route("propic/{slug}")]
[Produces("application/octet-stream", new string[] { "application/json" })]
[AllowAnonymous]
public Task<IActionResult> GetUserProPic(string slug)

Parameters

slug string

Returns

Task<IActionResult>

GetUsers(string?, PaginationFilter?, SortingOrder)

Gets a list of users with searchFilter, paginationFilter and sortingOrder applied.

[HttpGet]
[Route("")]
[Authorize(Policy = "https://api.gastrosky.ch/identity/claims/resources/users:R")]
[ProducesResponseType<ResponseBodyDto<UserResponseDto>>(200)]
public Task<IActionResult> GetUsers(string? searchFilter = null, PaginationFilter? paginationFilter = null, SortingOrder sortingOrder = SortingOrder.Ascending)

Parameters

searchFilter string

User search filter. This will query the DB against users that have columns like name, email address, phone number, etc... with a similar or identical value to the provided filter string.

paginationFilter PaginationFilter

Pagination filter. PaginationFilter

sortingOrder SortingOrder

Desired sorting order. Can be 0 for SortingOrder.Ascending or 1 for SortingOrder.Descending. SortingOrder

Returns

Task<IActionResult>

IActionResult

Exceptions

ArgumentOutOfRangeException

Thrown if an invalid SortingOrder parameter is passed.

Me()

Gets the user account information associated with the User specified in the provided auth token.

[HttpGet]
[Route("me")]
[ProducesResponseType(404)]
[ProducesResponseType<ResponseBodyDto<UserResponseDto>>(200)]
public Task<IActionResult> Me()

Returns

Task<IActionResult>

IActionResult

UpdateUserClaims(UserClaimsModificationRequestDto)

Updates a user's permissions/auth claims.

[HttpPut]
[Route("claims")]
[Authorize(Policy = "https://api.gastrosky.ch/identity/claims/resources/users:R")]
[Authorize(Policy = "https://api.gastrosky.ch/identity/claims/resources/users:W")]
[ProducesResponseType(400)]
[ProducesResponseType(403)]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
[ProducesResponseType<ResponseBodyDto<UserResponseDto>>(200)]
public Task<IActionResult> UpdateUserClaims(UserClaimsModificationRequestDto dto)

Parameters

dto UserClaimsModificationRequestDto

Request DTO containing the user slug and the updated user auth claims. Check out the API DocFX documentation on UserClaimsModificationRequestDto for more information.

Returns

Task<IActionResult>

IActionResult

Remarks

Sample request:

PUT /api/v1/users/claims
{
  "slug": "mariab",
  "claims": [
    {
      "resource": "https://gastrosky.ch/identity/claims/resources/posts",
      "accessType": 1
    },
    {
      "resource": "https://gastrosky.ch/identity/claims/resources/companies",
      "accessType": 3
    }
  ]
}

UpdateUserData(UserModificationRequestDto)

Updates a user's account information.

[HttpPut]
[Route("")]
[ProducesResponseType(400)]
[ProducesResponseType(403)]
[ProducesResponseType(500)]
[ProducesResponseType<ResponseBodyDto<UserResponseDto>>(200)]
public Task<IActionResult> UpdateUserData(UserModificationRequestDto dto)

Parameters

dto UserModificationRequestDto

Request DTO containing the user's updated information. Check out the API DocFX documentation on UserModificationRequestDto for more information.

Returns

Task<IActionResult>

IActionResult

Remarks

Sample request:

PUT /api/v1/users
{
  "slug": "mariab",
  "name": "Maria Bernoccolo",
  "phone": "+39000000000",
  "address": "Via Aggiornata nel DB",
  "zipCode": "6969",
  "location": "Hyrule",
  "countryCodeISO": "ZLD",
  "websiteURL": "https://example.org",
  "profilePictureBytesBase64": null,
  "language": 1
}