Skip to content

Instantly share code, notes, and snippets.

View MartinElvar's full-sized avatar

Martin Elvar MartinElvar

  • Copenhagen, Denmark
View GitHub Profile
import React, { Component } from "react";
import PropTypes from "prop-types";
import { Container, Row, Col } from "reactstrap";
import { graphql } from "react-apollo";
import { withRouter } from "react-router";
import ArticleCard from "../../components/ArticleCard";
import Paginator from "../../components/Paginator";
import TAG_QUERY from "../../graphql/queries/TagQuery.graphql";
import MORE_ARTICLES_TAG_QUERY from "../../graphql/queries/MoreArticlesTagQuery.graphql";
defmodule GraphqlHelpers do
import Ecto.Query
defmacro has_many(model, foreign_key) do
quote do
resolve fn subject, _, _ ->
batch({GraphqlHelpers, :process_has_many, {unquote(model), unquote(foreign_key)}}, subject.id, fn (batch_result) ->
{:ok, Map.get(batch_result, subject.id, %{})}
end)
end
defmodule GraphqlHelpers do
import Ecto.Query
@doc """
## example
field :storages, list_of(:storage), do: has_many(:storages)
"""
defmacro has_many(model) do
quote do
resolve fn subject, _, _ ->
defmodule Users.Types do
use Absinthe.Schema.Notation
import GraphqlHelpers
object :user do
field :id, :id
field :first_name, :string
field :last_name, :string
field :email, :string
field :phone, :string
defmacro belongs_to(model) do
[_ | module] = Module.split(unquote(model))
key = Macro.underscore(module) <> "_id" |> String.to_atom
quote do
.....
> belongs_to(Users.User)
== Compilation error on file lib/storages/schemas/storage_schema.ex ==
** (FunctionClauseError) no function clause matching in Module.split/1
defmodule ApiEndpoint.Endpoint do
# ....
plug Absinthe.Plug,
schema: ApiEndpoint.Schema
end
defmodule ApiEndpoint.Router do
forward "/api/v2", Absinthe.Plug, schema: ApiEndpoint.Schema
end
defmodule ApiEndpoint.Schema.Helpers do
def has_many({model, foreign_key}, ids) do
import Ecto.Query
model
|> where([m], field(m, ^foreign_key) in ^ids)
|> Storages.Repo.all
|> Enum.group_by(fn storage -> Map.get(storage, foreign_key) end)
end
end
# User has many storages.
#
# Give me a user, along with the storages it owns.
# q={user(id: 131) {name, storages{title} }}
defmodule Users.Types do
use Absinthe.Schema.Notation
object :user do
field :id, :id
App.User = DS.Model.extend({
name: DS.attr('string'),
email: DS.attr('string'),
createdDate: DS.attr(),
location: DS.attr('string')
});
App.User.FIXTURES = [{
id: 1,
name: "Johan",
@MartinElvar
MartinElvar / gist:7360873
Last active December 27, 2015 17:19
What is wrong
Sanatid.Service = DS.Model.extend
name: DS.attr('string')
description: DS.attr('string')
service_field: DS.belongsTo('service_field')
Sanatid.ServiceField = DS.Model.extend
name: DS.attr('string')
description: DS.attr('string')
services: DS.hasMany('service')