hykw

hykw

Absinthe showcase: Battery included GraphQL sample

Hello,
I’ve written a GraphQL server with Absinthe as a proof of concept and a prototype for the next project.

I found some samples, Absinthe Tutorial Codel for example, and those were good start as the first step, but the learning curve would be too steep when you want to implement some logics, such as avoiding an N+1 problem with dataloader, authorizing users, injecting some values into the result returned from dataloader, etc.

You can get the source code and some description about it here: absinthe_showcase

Features

  • Battery included

    • You can soon try in Docker Compose.
  • Written in the latest libraries:

    • OTP 21, Elixir 1.7.4
    • Phoenix 1.4, Ecto 3.0
    • Absinthe 1.4.13
  • Avoiding N+1 problem with dataloader

  • Authorizing user permission with a custom middleware

  • Count the number of records regardless of LIMIT/OFFSET specified, which is very useful in pagination

  • Supports multistage query such as {questions{users{} answers{}}}, {me {users{} questions{} answers{}}}, {questions{answers{users{}}}}, etc.

  • Various queries/mutations

    • mutations
      • login with email and password; supports two permissions
        • normal user
        • admin user
      • create user account
        • the only admin user can create new accounts
        • guests(no login user) or normal users are rejected
    • query
      • various queries includes total record counts

Feedback welcome!

This is the first time I’ve written an application with Absinthe. Any suggestions for improving this application, even the mistakes you find in my English, are welcome.

First 2 of 2 Posts! Switch mode

hlx

hlx

At Novistore we’re currently writing a big e-commerce app with Absinthe (GraphQL).

Having a lot of entities I found putting everything in 1 types file easier than putting the queries and mutations in the schema like you did.

Checkout a sample app I’ve made a while back to illustrate my point.

schema.ex
https://github.com/hl/blog/blob/master/lib/blog_api/schema.ex

post_types.ex
https://github.com/hl/blog/blob/master/lib/blog_api/schema/post_types.ex

hykw

hykw

Having a lot of entities I found putting everything in 1 types file easier than putting the queries and mutations in the schema like you did.

@hlx I’ve never thought of it!
Thank you for your feedback.

Where Next?

Trending in Discussions Top

AstonJ
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
2976 91332 914
New
f0rest8
Hi everyone :waving_hand: Posting here to showcase and announce that Metamorphic is now officially live on a public-facing domain at htt...
New
byu
@chrismccord : I just saw the Extract AGENTS.md from Phoenix.new into phx.new generator commit to the phoenix project. My initial shotgu...
New
arcanemachine
I was working on an Ecto migration and I needed a timestamp. So, for the nth time, I looked up the different data types for timestamps, a...
New
AstonJ
Just a general thread to post chat/news/info relating to AI/ML stuff that may be relevant for Nx now or in the future. Got anything to sh...
New
type1fool
I just stumbled on a newly redesigned elixir-lang.org. :tada: It looks like @Software_Mansion did the work, and I think it is generally a...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
akoutmos
@hugobarauna and I (Alex Koutmos) have been hard at work on writing a book on Nerves that takes you from simply blinking LEDs to building...
New
zachdaniel
Introducing AshStorage! Attachment and file management that slots directly into your resources :smiling_face_with_sunglasses: I had hope...
New

We're in Beta

About us Mission Statement