Skip to content

Commit 1079314

Browse files
authored
Merge pull request #8 from dandoh/upgrade_morpheus
[ graphql ] update morpheus
2 parents 6f24d43 + bb2c679 commit 1079314

File tree

6 files changed

+32
-26
lines changed

6 files changed

+32
-26
lines changed

package.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ default-extensions:
3030
- QuasiQuotes
3131
- ScopedTypeVariables
3232
- DuplicateRecordFields
33+
- RankNTypes
3334
- LambdaCase
3435
- NamedFieldPuns
3536

@@ -53,6 +54,7 @@ dependencies:
5354
- opaleye
5455
- unordered-containers
5556
- morpheus-graphql
57+
- morpheus-graphql-core
5658
- scotty
5759
- envy
5860
- load-env

src/Graphql.hs

+6-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
{-# LANGUAGE ConstraintKinds #-}
22
{-# LANGUAGE DataKinds #-}
3+
{-# LANGUAGE PolyKinds #-}
4+
{-# LANGUAGE RankNTypes #-}
35
{-# LANGUAGE UndecidableInstances #-}
46

57
module Graphql where
@@ -64,18 +66,10 @@ importGQLDocument "schema.graphql"
6466
-------------------------------------------------------------------------------
6567

6668
-- | Resolve single value
67-
type Value (o :: OperationType) a = Resolver o () Web a
69+
type Value (o :: OperationType) (a :: k) = ResolverO o () Web a
6870

69-
-- | Resolve object (which includes other fields that need their own resolvers)
70-
type Object (o :: OperationType) a = Resolver o () Web (a (Resolver o () Web))
71-
72-
-- | Resolve (Maybe object)
73-
type MaybeObject (o :: OperationType) a =
74-
Resolver o () Web (Maybe (a (Resolver o () Web)))
75-
76-
-- | Resolve [object]
77-
type ArrayObject (o :: OperationType) a =
78-
Resolver o () Web [a (Resolver o () Web)]
71+
-- | Resolve (f value)
72+
type Composed (o :: OperationType) f (a :: k) = ComposedResolver o () Web f a
7973

8074
type GraphQL o =
8175
( MonadIO (Resolver o () Web),
@@ -112,7 +106,7 @@ runSelectOne select errorMsg = do
112106
$ \connection -> Opaleye.runSelect connection select
113107
case xs of
114108
[x] -> return x
115-
_ -> failRes errorMsg
109+
_ -> fail errorMsg
116110

117111
-------------------------------------------------------------------------------
118112

src/Graphql/Resolver/Root.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import Data.Morpheus.Types
44
import Graphql
55
import Graphql.Resolver.User
66

7-
rootResolver :: GQLRootResolver Web () Query Mutation Undefined
7+
rootResolver :: RootResolver Web () Query Mutation Undefined
88
rootResolver =
9-
GQLRootResolver {queryResolver, mutationResolver, subscriptionResolver}
9+
RootResolver {queryResolver, mutationResolver, subscriptionResolver}
1010
where
1111
queryResolver = Query {login = loginResolver, myUserInfo = myUserInfoResolver}
1212
mutationResolver = Mutation {register = registerResolver, changePassword = changePasswordResolver}

src/Graphql/Resolver/User.hs

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
{-# LANGUAGE RankNTypes #-}
2+
13
module Graphql.Resolver.User where
24

35
import Authentication.JWT
@@ -22,7 +24,7 @@ import GHC.Int (Int64)
2224
import Graphql
2325

2426
-------------------------------------------------------------------------------
25-
userResolver :: GraphQL o => DB.User -> Object o User
27+
userResolver :: GraphQL o => DB.User -> Value o User
2628
userResolver user =
2729
let DB.User {userId, userEmail, userName} = record user
2830
in return
@@ -35,7 +37,7 @@ userResolver user =
3537
}
3638

3739
-------------------------------------------------------------------------------
38-
loginResolver :: GraphQL o => LoginArgs -> Object o Session
40+
loginResolver :: GraphQL o => LoginArgs -> Value o Session
3941
loginResolver LoginArgs {email, password} = do
4042
res :: [DB.User] <- runSelect $ findUserByEmail email
4143
case res of
@@ -44,21 +46,21 @@ loginResolver LoginArgs {email, password} = do
4446
secret <- lift $ asks (jwtSecret . config)
4547
let jwt = makeJWT time secret (DB.userId . record $ user)
4648
return Session {token = pure jwt, user = userResolver user}
47-
_ -> failRes "Wrong email or password"
49+
_ -> fail "Wrong email or password"
4850

4951
-------------------------------------------------------------------------------
50-
registerResolver :: RegisterArgs -> Object MUTATION Session
52+
registerResolver :: RegisterArgs -> Value MUTATION Session
5153
registerResolver RegisterArgs {email, password, name} = do
5254
res :: [DB.User] <- runSelect $ findUserByEmail email
5355
case res of
54-
_ : _ -> failRes "This email is already taken"
56+
_ : _ -> fail "This email is already taken"
5557
[] -> do
5658
ph <- liftIO $ hashPassword password
5759
runInsert $ insertUser (email, ph, name)
5860
loginResolver LoginArgs {email, password}
5961

6062
-------------------------------------------------------------------------------
61-
myUserInfoResolver :: Object QUERY User
63+
myUserInfoResolver :: Value QUERY User
6264
myUserInfoResolver = do
6365
myUserId <- requireAuthorized
6466
runSelectOne (findUserByID myUserId) "Invalid user" >>= userResolver
@@ -73,4 +75,4 @@ changePasswordResolver ChangePasswordArgs {oldPassword, newPassword} = do
7375
ph <- liftIO $ hashPassword newPassword
7476
runUpdate $ updateUserPassword myUserId ph
7577
return True
76-
else failRes "Wrong old password"
78+
else fail "Wrong old password"

stack.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ packages:
3636
# forks / in-progress versions pinned to a git hash. For example:
3737
#
3838
extra-deps:
39-
- morpheus-graphql-0.10.0
39+
- morpheus-graphql-core-0.13.0
40+
- morpheus-graphql-0.13.0
4041
- postgresql-simple-url-0.2.1.0
4142

4243
# Override default flag values for local packages and extra-deps

stack.yaml.lock

+11-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55

66
packages:
77
- completed:
8-
hackage: morpheus-graphql-0.10.0@sha256:02d06672f508d0c199932f81fdab1337e967375d57d91cec00fa02b7bfc70abb,24229
8+
hackage: morpheus-graphql-core-0.13.0@sha256:af4c0cc0f5c84cbcb85486329574f2ced98326be4fedd8a7fa116bf783d5a8b6,6774
99
pantry-tree:
10-
size: 35491
11-
sha256: bab034192a83daee625055d762eb988fb139cbed12c549ba8939c1fcade2d25f
10+
size: 8516
11+
sha256: f0155c18930d61ebb6b1f5d81321bdf49f41dffbab3f9b07a6cc3785c540ac9b
1212
original:
13-
hackage: morpheus-graphql-0.10.0
13+
hackage: morpheus-graphql-core-0.13.0
14+
- completed:
15+
hackage: morpheus-graphql-0.13.0@sha256:d8173116f630ecf264747bf31a823126452f144e1802d236b64efcf8677289cb,28007
16+
pantry-tree:
17+
size: 40014
18+
sha256: 5b390bba65d00644b0c99d7cbda308d1ff0706a33c90523d6cfcdd5005cab90d
19+
original:
20+
hackage: morpheus-graphql-0.13.0
1421
- completed:
1522
hackage: postgresql-simple-url-0.2.1.0@sha256:25aa9dca3c05b2c66b9336907d9300f1312fbdfa54e0d395b52d1a1e6579810a,1837
1623
pantry-tree:

0 commit comments

Comments
 (0)