Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/straw-hat-labs/straw_hat_review

Review System
https://github.com/straw-hat-labs/straw_hat_review

elixir elixir-lang otp reviews

Last synced: about 1 month ago
JSON representation

Review System

Awesome Lists containing this project

README

        

# StrawHat.Review

[![Health Checking](https://github.com/straw-hat-team/straw_hat_review/workflows/Health%20Checking/badge.svg)](https://github.com/straw-hat-team/straw_hat_review/actions)
[![Code Coverage](https://codecov.io/gh/straw-hat-team/straw_hat_review/branch/master/graph/badge.svg)](https://codecov.io/gh/straw-hat-team/straw_hat_review)
[![Docs Health](https://inch-ci.org/github/straw-hat-team/straw_hat_review.svg)](https://inch-ci.org/github/straw-hat-team/straw_hat_review)

`StrawHat.Review` will help you to add reviews to your systems. We took
inspiration from Amazon, Lyf, Google, Uber and Fiverr review systems.

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `straw_hat_review` to your list of dependencies in `mix.exs`:

```elixir
def deps do
[
{:straw_hat_review, "~> 0.1"}
]
end
```

## Usage

We will cover the basic interactions of the systems but please check out
each Interactor module which are the ones that expose the API that developers
should be using.

### Aspects

Let's create some aspects based on Fiverr Reviews.

```elixir
# id: 1
StrawHat.Review.Aspects.create_review(%{
name: "seller_communication"
})

# id: 2
StrawHat.Review.Aspects.create_review(%{
name: "service_as_described"
})

# id: 3
StrawHat.Review.Aspects.create_review(%{
name: "would_recommend"
})
```

### Reviews

Now let's give some review to a user.

Normally the reviewee and reviewer are just an string that your systems will
know how to do the aggregation with that data. For example, your system that
uses `StrawHat.Review` knows that `"user:" <> user_id` is the way to read back
the user id of the reviewee and reviewer.

```elixir
# id: 1
StrawHat.Review.Review.create_review(%{
reviewee_id: "user:1",
reviewer_id: "user:2",
comment: "Amazing experience, I really recommended it",
aspects: [
%{
aspect_id: 1, # seller_communication
score: 5
},
%{
aspect_id: 2, # service_as_described
score: 5
},
%{
aspect_id: 3, # would_recommend
score: 5
}
]
medias: [
%Plug.Upload{
content_type: "image/png",
filename: "some_random_file_name.png",
path: "~tmp/some_random_name.png"
}
]
})
```

### Comments

Now we could add some comments to the review.

```elixir
# id: 1
StrawHat.Review.Comments.create_comment(%{
comment: "Really helpful review, thank you very much",
owner_id: "user:3",
review_id: 1
})
```

### Reactions

We could create some reactions for the systems so it could be use later
on reviews and comments.

```elixir
# id: 1
StrawHat.Review.Reactions.create_reaction(%{
name: "like"
})

# id: 2
StrawHat.Review.Reactions.create_reaction(%{
name: "dislike"
})
```

Now we could react to the reviews and comments

```elixir
StrawHat.Review.ReviewReactions.create_review_reaction(%{
review_id: 1,
reaction_id: 1,
user_id: "user:1"
})

StrawHat.Review.CommentReactions.create_comment_reaction(%{
review_id: 1,
reaction_id: 1,
user_id: "user:1"
})
```

That is a basic usage of the package. Check the interactor modules for more
available APIs.