Skip to content

v1.7.2

Latest
Compare
Choose a tag to compare
@thewizardplusplus thewizardplusplus released this 25 Aug 19:48

Add a few example tasks.

Change Log

  • example tasks:
    • add the migration that creates a few example tasks:
      • add the utility for applying migrations;
    • add the solutions for the example tasks.

Features

  • RESTful API:
    • models:
      • task model:
        • storing:
          • author ID;
          • title;
          • description;
          • boilerplate code;
          • test cases:
            • all test cases are represented by a single string;
        • operations:
          • getting all tasks:
            • calculate a total correctness flag based on all solutions of a requesting author;
            • sort the results by creation time in descending order;
            • process pagination:
              • implemented using an offset and a limit;
          • getting a single task by an ID:
            • calculate a total correctness flag based on all solutions of a requesting author;
          • creating:
            • automatically format a task boilerplate code;
          • updating by an ID:
            • allowed for its author only;
            • automatically format a task boilerplate code;
          • deleting by an ID:
            • allowed for its author only;
      • solution model:
        • storing:
          • author ID;
          • task ID;
          • code;
          • correctness flag;
          • testing result:
            • represented by a string;
        • operations:
          • getting all solutions by a task ID:
            • filtered by a requesting author:
              • allow a solution task author to get solutions of other authors;
            • sort the results by creation time in descending order;
            • process pagination:
              • implemented using an offset and a limit;
          • getting a single solution by an ID:
            • allowed for:
              • solution author;
              • solution task author;
          • creating:
            • automatically format a solution code;
          • updating by an ID:
            • performed by a queue consumer only (see below);
          • formatting a solution code;
    • representing:
      • in a JSON:
        • payloads:
          • of requests;
          • of responses;
      • as a plain text:
        • errors;
  • server:
    • additional routing:
      • serving static files;
    • storing settings in environment variables;
    • supporting graceful shutdown;
    • logging:
      • logging requests;
      • logging errors;
    • panics:
      • recovering on panics;
      • logging of panics;
  • authentication:
    • use the Bearer authentication scheme based on JSON Web Tokens:
      • store in a JWT claims:
        • expiration time claim;
        • user claim:
          • contains a whole user model;
    • generate a token signing key automatically by default;
    • user model:
      • storing:
        • username (unique);
        • password hash:
          • generated using the bcrypt function;
        • flag indicating whether the user is disabled or not;
  • databases:
  • interaction with queues:
    • using the RabbitMQ message broker;
    • common properties:
      • automatic declaring of the used queues;
      • passing of a message data in JSON;
    • operations:
      • producing solutions:
        • concurrent producing;
      • consuming solution results:
        • concurrent consuming;
        • once requeue the solution on failure;
  • utilities:
    • utility for managing users:
      • commands:
        • add a user:
          • parameters:
            • username;
            • password;
            • password hashing cost;
            • flag indicating the need to generate a password;
            • generated password length;
            • flag indicating whether the user is disabled or not;
        • update a user:
          • parameters:
            • username;
            • new username;
            • password;
            • password hashing cost;
            • flag indicating the need to generate a password;
            • generated password length;
            • flag indicating whether the user is disabled or not;
            • flag indicating whether the user is enabled or not;
          • can update the user fields individually;
  • distributing: