Giter VIP home page Giter VIP logo

cut.it's Introduction

cut.it's People

Contributors

avapl avatar

Watchers

 avatar

cut.it's Issues

Add basic GraphQL service

The goal is to implement a GraphQL service with example query and mutation.

To do:

  • add an sbt module for that service
  • implement an example query (e.g. returning "Hello world!")
  • implement an example mutation (e.g. changing current username and returning previous one)
  • add Akka HTTP endpoint
  • add GraphiQL interface
  • add logging
  • config file for server port etc.
  • test implemented service
  • create a docker container with the service

Add automatic tool to merge pull requests from Scala Steward

As multiple pull requests are created each time Scala Steward is run they can be merged automatically. A tool like Mergify can be used for this purpose.

The tool should include:

  • merging automatically when checks pass
  • automatically updating pull requests to newest version of master branch
  • labeling pull requests dedicated to dependencies updates

Update wiki pages

Wiki pages are quite outdated, update them according to newest changes.

Update wiki pages

Describe:

  • common module
    • config module
    • logging module
  • scripts and their arguments

Create a config module

Extract the config trait from basic GraphQL service to a separate module that can be used across other modules.

To do:

  • extract trait to a separate module
  • test if config for basic GraphQL service works correctly with it

Clean up scripts

Currently scripts have common parts and are not really flexible due to hardcoded service names and profiles. The goal is to extract not obvious parts to functions and generally improve the maintainability of the scripts.

To do:

  • move project names to a variable
  • move profiles to a variable There are only a few profiles so it is not important. Also it is problematic to implement. Skipped.
  • extract common parts
  • create functions that are easy to read

Add UI

Add basic UI for the page using Angular.

To do:

  • input field for uri to cut
  • displaying cutting result with "copy to clipboard" icon
  • a special page for 404 error in link-store

Add logging module

Create a logging trait that will be able to dynamically change logging level. Module should use Scribe. Dynamic logging level should be handled via REST endpoint at localhost:1065/logging. REST is used because it's simpler than GraphQL for this task and doesn't require Sangria. The trait should be reusable across other modules by including it to App trait (so this: App => self type is required).

Example request that changes logging level to debug:
POST @ localhost:1065/logging

{
    "minimumLevel": "DEBUG"
}

It should set logging level to debug and return 204 No Content.

Requirements:

  • Scribe as logging library
  • Akka HTTP for server and endpoint
  • Circe for Json decoding

To do:

  • implement logging trait as described above
  • attach it to existing services that use logging
  • test implementation

Create link-store service

Cutting a link:

  • receive link created message from Kafka
  • save created link to Elasticsearch
  • test implementation

Link retrieval:

  • receive retrieve link request
  • retrieve link from Elasticsearch
  • send link retrieved message to Kafka
  • send a redirection with retrieved link
  • test implementation

The link retrieval should be done via basic HTTP calls instead of GraphQL. In the future this service can be extended with GraphQL queries support.

Create cut-link service

Build a cut-link service basing on basic-graphql module.

To do:

  • receive cut link mutation
  • send cut link request message to Kafka
  • send cut link response
  • set up Kafka
  • test implemented service
  • update run.sh and stop.sh to new docker-compose files

Add container unit tests

Add container tests for classes that are using Kafka and Elasticsearch directly.

To do:

  • KafkaConnector
  • ElasticConnector
  • cut link flow (from request to ES document)
  • retrieve link flow (from request to link retrieved Kafka event)

Refactor logging module

Currently the logging module allows only to set the global logging level which is not convenient because eg. Kafka has many trace level logs. The idea is to split the logging settings into a separate level for main project package and other packages. Example: cut.link.* has logging level TRACE and other packages have logging level WARN. Also for further potential extensions of this module the server should have GraphQL interface with GraphiQL endpoint.

To do:

  • change REST to GraphQL
  • add default level setting for main package and other packages as overridable method
  • add an option to change both levels via GraphQL mutation
  • test implementation

Kafka is inaccessible using kafkalytic

Using kafkalytic is not possible for Kafka. The plugin says that the connection is successful but loading topics etc. does not work. The development process is easier with this kind of third party tools.

Improve CI/CD

Add workflows for:

  • Scala style using ScalaFMT
  • build
  • tests

Preserve the order of checks from the list above if possible.


Test each workflow by providing invalid and then valid code in commits:

  • Scala style using ScalaFMT
  • build
  • tests

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.