Skip to content

General

Student, or a small group (2-3 students), designs and implements a backend service providing a REST API *) for a photo gallery service based on a provided requirement specification.

The created service integrates with other core application components, such as a database, block storage and other external APIs.

Student is free to use any coding language, framework or tools as long as they are able to comply with the following requirements.

The solution must be service oriented => usage of external services is required. For example and API that stores uploaded images locally doesn't comply with the requirements.

*) Optionally a GraphQL solution is also acceped.

Requirements

Core API functionality:

  • Ability to upload a new image
  • Ability to list uploaded images
    • Pagination / limitation of results
    • List uploads per user (@username or @me)
  • Ability to remove an uploaded image
  • Ability to vote (upvote, downvote) an image
  • Ability to mark image as a favorite or remove it
  • Ability to comment on a image
  • Ability to edit or remove comments

Advanced API functionality:

  • Ability to create a user / register
  • Ability to login and logout
  • Able to list most "trending" images
    • most upvoted within the last 24 hours for example
  • Logging is done to an external logging server

Extra credits:

  • API contains tests
  • Ability to download favorites as a zip / export
  • Login using a Google / Facebook / etc. account
  • Multiple user levels (admin, normal user, anonymous)
  • Public (shows up in recent uploads) and private (only visible to self) gallery
  • Report this image feature

Special requirements:

  • Usage of Gitlab CI to build a docker image of the API and upload it to Gitlab container registry
  • Creating a docker-compose.yaml file with the appropriate environment variables defined

Returning

Due date: 7th of May

Return a link to the git repository for the project. The link should be returned to Moodle workspace There should also be a README.md file inside the repository that summarizes what features are working, and what features are incomplete.

The README file must also contain the API documentation detailing the methods, routes, return values and response codes in the API. See the Gitlab API documentation for an example: https://docs.gitlab.com/ee/api/members.html

In the same file also write a small report that contains:

  • Time tracking (how many spend hours on what features)
  • What parts of the project you found were easy
  • What parts were hard
  • What was the greatest learning experience for you during the project
  • Any additional info you might want to provide.

Make sure I "konte" will have at least developer access to the GitLab project you provide. Otherwise I wont be able to grade your assignment.