Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a5410dff2c | ||
|
|
7e3dc49635 |
+3
-7
@@ -1,16 +1,12 @@
|
|||||||
## 1. Build Server
|
## 1. Build Server
|
||||||
# Use Go 1.10
|
# Use Go 1.12
|
||||||
FROM golang:1.11 AS build-server
|
FROM golang:1.12 AS build-server
|
||||||
|
|
||||||
# Load repository into docker
|
# Load repository into docker
|
||||||
WORKDIR /go/src/git.aiterp.net/rpdata/api/
|
WORKDIR /project/
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN rm -rf ./vendor
|
|
||||||
|
|
||||||
# Install build tools and dependencies
|
# Install build tools and dependencies
|
||||||
RUN go get -u github.com/golang/dep/cmd/dep
|
|
||||||
RUN go get -u github.com/vektah/gorunpkg
|
|
||||||
RUN dep ensure
|
|
||||||
RUN go generate ./...
|
RUN go generate ./...
|
||||||
|
|
||||||
# Build server and tools (CGO disabled to make them 100% static)
|
# Build server and tools (CGO disabled to make them 100% static)
|
||||||
|
|||||||
Generated
-250
@@ -1,250 +0,0 @@
|
|||||||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
|
||||||
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/99designs/gqlgen"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"cmd",
|
|
||||||
"codegen",
|
|
||||||
"codegen/templates",
|
|
||||||
"complexity",
|
|
||||||
"graphql",
|
|
||||||
"graphql/introspection",
|
|
||||||
"handler",
|
|
||||||
"internal/gopath"
|
|
||||||
]
|
|
||||||
revision = "636435b68700211441303f1a5ed92f3768ba5774"
|
|
||||||
version = "v0.5.1"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/agnivade/levenshtein"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "3d21ba515fe27b856f230847e856431ae1724adc"
|
|
||||||
version = "v1.0.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/davecgh/go-spew"
|
|
||||||
packages = ["spew"]
|
|
||||||
revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
|
|
||||||
version = "v1.1.1"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/dgrijalva/jwt-go"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e"
|
|
||||||
version = "v3.2.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "github.com/dustin/go-humanize"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "bb3d318650d48840a39aa21a027c6630e198e626"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "github.com/globalsign/mgo"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"bson",
|
|
||||||
"internal/json",
|
|
||||||
"internal/sasl",
|
|
||||||
"internal/scram"
|
|
||||||
]
|
|
||||||
revision = "f76e4f9da92ecd56e3be26f5ba92580af1ef97b4"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/go-ini/ini"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "ace140f73450505f33e8b8418216792275ae82a7"
|
|
||||||
version = "v1.35.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/go-sql-driver/mysql"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "d523deb1b23d913de5bdada721a6071e71283618"
|
|
||||||
version = "v1.4.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/gorilla/websocket"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "66b9c49e59c6c48f0ffce28c2d8b8a5678502c6d"
|
|
||||||
version = "v1.4.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/graph-gophers/dataloader"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "78139374585c29dcb97b8f33089ed11959e4be59"
|
|
||||||
version = "v5"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/hashicorp/golang-lru"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"simplelru"
|
|
||||||
]
|
|
||||||
revision = "20f1fb78b0740ba8c3cb143a61e86ba5c8669768"
|
|
||||||
version = "v0.5.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "github.com/jmoiron/sqlx"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"reflectx"
|
|
||||||
]
|
|
||||||
revision = "0dae4fefe7c0e190f7b5a78dac28a1c82cc8d849"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/minio/minio-go"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"pkg/credentials",
|
|
||||||
"pkg/encrypt",
|
|
||||||
"pkg/s3signer",
|
|
||||||
"pkg/s3utils",
|
|
||||||
"pkg/set"
|
|
||||||
]
|
|
||||||
revision = "3d2d02921f0510e9d1f66ef77a265b8dddd36992"
|
|
||||||
version = "6.0.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "github.com/mitchellh/go-homedir"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "b8bc1bf767474819792c23f32d8286a45736f1c6"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/opentracing/opentracing-go"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"log"
|
|
||||||
]
|
|
||||||
revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38"
|
|
||||||
version = "v1.0.2"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/pkg/errors"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "645ef00459ed84a119197bfb8d8205042c6df63d"
|
|
||||||
version = "v0.8.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/pmezard/go-difflib"
|
|
||||||
packages = ["difflib"]
|
|
||||||
revision = "792786c7400a136282c1664665ae0a8db921c6c2"
|
|
||||||
version = "v1.0.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/sirupsen/logrus"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "c155da19408a8799da419ed3eeb0cb5db0ad5dbc"
|
|
||||||
version = "v1.0.5"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/stretchr/testify"
|
|
||||||
packages = ["assert"]
|
|
||||||
revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686"
|
|
||||||
version = "v1.2.2"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/urfave/cli"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1"
|
|
||||||
version = "v1.20.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "github.com/vektah/gqlparser"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"ast",
|
|
||||||
"gqlerror",
|
|
||||||
"lexer",
|
|
||||||
"parser",
|
|
||||||
"validator",
|
|
||||||
"validator/rules"
|
|
||||||
]
|
|
||||||
revision = "14e83ae06ec152e6d0afb9766a00e0c0918aa8fc"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "golang.org/x/crypto"
|
|
||||||
packages = [
|
|
||||||
"argon2",
|
|
||||||
"blake2b",
|
|
||||||
"ssh/terminal"
|
|
||||||
]
|
|
||||||
revision = "d6449816ce06963d9d136eee5a56fca5b0616e7e"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "golang.org/x/net"
|
|
||||||
packages = [
|
|
||||||
"context",
|
|
||||||
"idna",
|
|
||||||
"lex/httplex"
|
|
||||||
]
|
|
||||||
revision = "a35a21de978d84ffc92f010a153705b170b2f9d1"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "golang.org/x/sys"
|
|
||||||
packages = [
|
|
||||||
"unix",
|
|
||||||
"windows"
|
|
||||||
]
|
|
||||||
revision = "2f57af4873d00d535c5c9028850aa2152e6a5566"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "golang.org/x/text"
|
|
||||||
packages = [
|
|
||||||
"collate",
|
|
||||||
"collate/build",
|
|
||||||
"internal/colltab",
|
|
||||||
"internal/gen",
|
|
||||||
"internal/tag",
|
|
||||||
"internal/triegen",
|
|
||||||
"internal/ucd",
|
|
||||||
"language",
|
|
||||||
"secure/bidirule",
|
|
||||||
"transform",
|
|
||||||
"unicode/bidi",
|
|
||||||
"unicode/cldr",
|
|
||||||
"unicode/norm",
|
|
||||||
"unicode/rangetable"
|
|
||||||
]
|
|
||||||
revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
|
|
||||||
version = "v0.3.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "golang.org/x/tools"
|
|
||||||
packages = [
|
|
||||||
"go/ast/astutil",
|
|
||||||
"go/buildutil",
|
|
||||||
"go/internal/cgo",
|
|
||||||
"go/loader",
|
|
||||||
"imports",
|
|
||||||
"internal/fastwalk"
|
|
||||||
]
|
|
||||||
revision = "677d2ff680c188ddb7dcd2bfa6bc7d3f2f2f75b2"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "google.golang.org/appengine"
|
|
||||||
packages = ["cloudsql"]
|
|
||||||
revision = "b1f26356af11148e710935ed1ac8a7f5702c7612"
|
|
||||||
version = "v1.1.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "gopkg.in/yaml.v2"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
|
|
||||||
version = "v2.2.1"
|
|
||||||
|
|
||||||
[solve-meta]
|
|
||||||
analyzer-name = "dep"
|
|
||||||
analyzer-version = 1
|
|
||||||
inputs-digest = "eb8fc099a909f5d8f756b24fbcb6cc2856e132bd3ed16b8fe512f22fabb99596"
|
|
||||||
solver-name = "gps-cdcl"
|
|
||||||
solver-version = 1
|
|
||||||
-43
@@ -1,43 +0,0 @@
|
|||||||
# Gopkg.toml example
|
|
||||||
#
|
|
||||||
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
|
|
||||||
# for detailed Gopkg.toml documentation.
|
|
||||||
#
|
|
||||||
# required = ["github.com/user/thing/cmd/thing"]
|
|
||||||
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
|
||||||
#
|
|
||||||
# [[constraint]]
|
|
||||||
# name = "github.com/user/project"
|
|
||||||
# version = "1.0.0"
|
|
||||||
#
|
|
||||||
# [[constraint]]
|
|
||||||
# name = "github.com/user/project2"
|
|
||||||
# branch = "dev"
|
|
||||||
# source = "github.com/myfork/project2"
|
|
||||||
#
|
|
||||||
# [[override]]
|
|
||||||
# name = "github.com/x/y"
|
|
||||||
# version = "2.4.0"
|
|
||||||
#
|
|
||||||
# [prune]
|
|
||||||
# non-go = false
|
|
||||||
# go-tests = true
|
|
||||||
# unused-packages = true
|
|
||||||
|
|
||||||
required = [ "github.com/99designs/gqlgen" ]
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
branch = "master"
|
|
||||||
name = "github.com/globalsign/mgo"
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/minio/minio-go"
|
|
||||||
version = "6.0.0"
|
|
||||||
|
|
||||||
[prune]
|
|
||||||
go-tests = true
|
|
||||||
unused-packages = true
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/stretchr/testify"
|
|
||||||
version = "1.2.2"
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
module git.aiterp.net/rpdata/api
|
||||||
|
|
||||||
|
go 1.12
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/99designs/gqlgen v0.8.0
|
||||||
|
github.com/agnivade/levenshtein v1.0.1
|
||||||
|
github.com/davecgh/go-spew v1.1.1
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
|
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4
|
||||||
|
github.com/globalsign/mgo v0.0.0-20180403085842-f76e4f9da92e
|
||||||
|
github.com/go-ini/ini v1.35.0
|
||||||
|
github.com/go-sql-driver/mysql v1.4.0
|
||||||
|
github.com/gorilla/websocket v1.4.0
|
||||||
|
github.com/graph-gophers/dataloader v0.0.0-20180104184831-78139374585c
|
||||||
|
github.com/hashicorp/golang-lru v0.5.0
|
||||||
|
github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0
|
||||||
|
github.com/minio/minio-go v0.0.0-20180409193742-3d2d02921f05
|
||||||
|
github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747
|
||||||
|
github.com/opentracing/opentracing-go v1.0.2
|
||||||
|
github.com/pkg/errors v0.8.1
|
||||||
|
github.com/pmezard/go-difflib v1.0.0
|
||||||
|
github.com/sirupsen/logrus v1.0.5
|
||||||
|
github.com/stretchr/testify v1.3.0
|
||||||
|
github.com/urfave/cli v1.20.0
|
||||||
|
github.com/vektah/gqlparser v1.1.0
|
||||||
|
golang.org/x/crypto v0.0.0-20180411161317-d6449816ce06
|
||||||
|
golang.org/x/net v0.0.0-20180416171110-a35a21de978d
|
||||||
|
golang.org/x/sys v0.0.0-20180416112224-2f57af4873d0
|
||||||
|
golang.org/x/text v0.3.0
|
||||||
|
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6
|
||||||
|
google.golang.org/appengine v1.1.0
|
||||||
|
gopkg.in/yaml.v2 v2.2.2
|
||||||
|
)
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
github.com/99designs/gqlgen v0.5.1 h1:cRsbpZgX83PrXb0/hj5EkNdmaVN4l/Eii81Z8LCexgY=
|
||||||
|
github.com/99designs/gqlgen v0.5.1/go.mod h1:KSQDfLlTTGmzlRgLGm6HeKKKo598l5E2svEM6Nz2Jnw=
|
||||||
|
github.com/99designs/gqlgen v0.8.0 h1:ZBteuSgeeFwn+mztjDqQZQdVa9pqslmPnDeCovcnc0Y=
|
||||||
|
github.com/99designs/gqlgen v0.8.0/go.mod h1:st7qHA6ssU3uRZkmv+wzrzgX4srvIqEIdE5iuRW8GhE=
|
||||||
|
github.com/99designs/gqlgen v0.8.3 h1:I6bMglXNKkn4KlvkSMzqZw53e1N2FF9Gud4NmsOxqiA=
|
||||||
|
github.com/99designs/gqlgen v0.8.3/go.mod h1:aLyJw9xUgdJxZ8EqNQxo2pGFhXXJ/hq8t7J4yn8TgI4=
|
||||||
|
github.com/agnivade/levenshtein v1.0.0 h1:q+77q31bLT5jhN3BHKA1276nUEdbz7XjDa0o5dRKcZ0=
|
||||||
|
github.com/agnivade/levenshtein v1.0.0/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
|
||||||
|
github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ=
|
||||||
|
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
|
||||||
|
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
|
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
|
github.com/globalsign/mgo v0.0.0-20180403085842-f76e4f9da92e h1:hmrbHva/wKD6X4M7pgHVbg/KfVV1wwgr1NEkQaVD3rU=
|
||||||
|
github.com/globalsign/mgo v0.0.0-20180403085842-f76e4f9da92e/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
|
||||||
|
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
|
||||||
|
github.com/go-ini/ini v1.35.0 h1:D/my3+xOfqZMkJpciRcyqU7XMBUgiZa9qXjZIa8uv2k=
|
||||||
|
github.com/go-ini/ini v1.35.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||||
|
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
|
||||||
|
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
|
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
|
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
|
github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
|
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
|
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||||
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
|
github.com/graph-gophers/dataloader v0.0.0-20180104184831-78139374585c h1:94S+uoVVMpQAEOrqGjCDyUdML4dJDkh6aC4MYmXECg4=
|
||||||
|
github.com/graph-gophers/dataloader v0.0.0-20180104184831-78139374585c/go.mod h1:jk4jk0c5ZISbKaMe8WsVopGB5/15GvGHMdMdPtwlRp4=
|
||||||
|
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
||||||
|
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
|
github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0 h1:5B0uxl2lzNRVkJVg+uGHxWtRt4C0Wjc6kJKo5XYx8xE=
|
||||||
|
github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU=
|
||||||
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/minio/minio-go v0.0.0-20180409193742-3d2d02921f05 h1:YEyFCqmHcmbcTLqZ7yEAg7VIUat6PuDzGbIctZy888k=
|
||||||
|
github.com/minio/minio-go v0.0.0-20180409193742-3d2d02921f05/go.mod h1:7guKYtitv8dktvNUGrhzmNlA5wrAABTQXCoesZdFQO8=
|
||||||
|
github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747 h1:eQox4Rh4ewJF+mqYPxCkmBAirRnPaHEB26UkNuPyjlk=
|
||||||
|
github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
|
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
|
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
|
||||||
|
github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg=
|
||||||
|
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
|
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
|
||||||
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
|
||||||
|
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||||
|
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
|
||||||
|
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
|
||||||
|
github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
|
||||||
|
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||||
|
github.com/vektah/dataloaden v0.2.0/go.mod h1:vxM6NuRlgiR0M6wbVTJeKp9vQIs81ZMfCYO+4yq/jbE=
|
||||||
|
github.com/vektah/gqlparser v0.0.0-20180831041411-14e83ae06ec1 h1:FYOXUtr3sYR9shto7Q/aQ1B0Onyk77aws9wGOORiz+I=
|
||||||
|
github.com/vektah/gqlparser v0.0.0-20180831041411-14e83ae06ec1/go.mod h1:K4QdSSpS2XiHHwzb18kWh3iBljB8rLC8okGXsnQy3Nc=
|
||||||
|
github.com/vektah/gqlparser v1.1.0 h1:3668p2gUlO+PiS81x957Rpr3/FPRWG6cxgCXAvTS1hw=
|
||||||
|
github.com/vektah/gqlparser v1.1.0/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
|
||||||
|
github.com/vektah/gqlparser v1.1.2 h1:ZsyLGn7/7jDNI+y4SEhI4yAxRChlv15pUHMjijT+e68=
|
||||||
|
github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
|
||||||
|
golang.org/x/crypto v0.0.0-20180411161317-d6449816ce06 h1:EOqG0JqGlLr+punVB69jvWCv/ErZKGlC7PMdyHfv+Bc=
|
||||||
|
golang.org/x/crypto v0.0.0-20180411161317-d6449816ce06/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
|
golang.org/x/net v0.0.0-20180404174746-b3c676e531a6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20180416171110-a35a21de978d h1:O2P57H5Cc+d+DJos+iweraI9rmzMYwV+45vkZdDY0Oo=
|
||||||
|
golang.org/x/net v0.0.0-20180416171110-a35a21de978d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/sys v0.0.0-20180416112224-2f57af4873d0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180911133044-677d2ff680c1 h1:dzEuQYa6+a3gROnSlgly5ERUm4SZKJt+dh+4iSbO+bI=
|
||||||
|
golang.org/x/tools v0.0.0-20180911133044-677d2ff680c1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6 h1:iZgcI2DDp6zW5v9Z/5+f0NuqoxNdmzg4hivjk2WLXpY=
|
||||||
|
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
||||||
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
||||||
|
sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
|
||||||
+1
-1
@@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
//go:generate ./combine.sh
|
//go:generate ./combine.sh
|
||||||
//go:generate gorunpkg github.com/99designs/gqlgen -v
|
//go:generate go run github.com/99designs/gqlgen -v
|
||||||
|
|
||||||
// New creates a new GraphQL schema.
|
// New creates a new GraphQL schema.
|
||||||
func New() graphql.ExecutableSchema {
|
func New() graphql.ExecutableSchema {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
// Queries
|
// Queries
|
||||||
|
|
||||||
func (r *resolver) Channel(ctx context.Context, name string) (models.Channel, error) {
|
func (r *resolver) Channel(ctx context.Context, name string) (*models.Channel, error) {
|
||||||
return channels.FindName(name)
|
return channels.FindName(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,10 +24,10 @@ func (r *resolver) Channels(ctx context.Context, filter *channels.Filter) ([]mod
|
|||||||
|
|
||||||
// Mutations
|
// Mutations
|
||||||
|
|
||||||
func (r *mutationResolver) AddChannel(ctx context.Context, input input.ChannelAddInput) (models.Channel, error) {
|
func (r *mutationResolver) AddChannel(ctx context.Context, input input.ChannelAddInput) (*models.Channel, error) {
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
if !token.Authenticated() || !token.Permitted("channel.add") {
|
if !token.Authenticated() || !token.Permitted("channel.add") {
|
||||||
return models.Channel{}, errors.New("You are not permitted to add channels")
|
return nil, errors.New("You are not permitted to add channels")
|
||||||
}
|
}
|
||||||
|
|
||||||
logged := false
|
logged := false
|
||||||
@@ -49,7 +49,7 @@ func (r *mutationResolver) AddChannel(ctx context.Context, input input.ChannelAd
|
|||||||
|
|
||||||
channel, err := channels.Add(input.Name, logged, hub, eventName, locationName)
|
channel, err := channels.Add(input.Name, logged, hub, eventName, locationName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Channel{}, errors.New("Failed to add channel: " + err.Error())
|
return nil, errors.New("Failed to add channel: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Channel", "add", token.UserID, true, changekeys.Listed(channel), channel)
|
go changes.Submit("Channel", "add", token.UserID, true, changekeys.Listed(channel), channel)
|
||||||
@@ -57,20 +57,20 @@ func (r *mutationResolver) AddChannel(ctx context.Context, input input.ChannelAd
|
|||||||
return channel, nil
|
return channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) EditChannel(ctx context.Context, input input.ChannelEditInput) (models.Channel, error) {
|
func (r *mutationResolver) EditChannel(ctx context.Context, input input.ChannelEditInput) (*models.Channel, error) {
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
if !token.Authenticated() || !token.Permitted("channel.edit") {
|
if !token.Authenticated() || !token.Permitted("channel.edit") {
|
||||||
return models.Channel{}, errors.New("You are not permitted to edit channels")
|
return nil, errors.New("You are not permitted to edit channels")
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, err := channels.FindName(input.Name)
|
channel, err := channels.FindName(input.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Channel{}, errors.New("Channel not found")
|
return nil, errors.New("Channel not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, err = channels.Edit(channel, input.Logged, input.Hub, input.EventName, input.LocationName)
|
channel, err = channels.Edit(*channel, input.Logged, input.Hub, input.EventName, input.LocationName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Channel{}, errors.New("Failed to edit channel: " + err.Error())
|
return nil, errors.New("Failed to edit channel: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Channel", "edit", token.UserID, true, changekeys.Listed(channel), channel)
|
go changes.Submit("Channel", "edit", token.UserID, true, changekeys.Listed(channel), channel)
|
||||||
|
|||||||
+28
-28
@@ -19,34 +19,34 @@ import (
|
|||||||
|
|
||||||
// Queries
|
// Queries
|
||||||
|
|
||||||
func (r *resolver) Chapter(ctx context.Context, id string) (models.Chapter, error) {
|
func (r *resolver) Chapter(ctx context.Context, id string) (*models.Chapter, error) {
|
||||||
return chapters.FindID(id)
|
return chapters.FindID(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mutations
|
// Mutations
|
||||||
|
|
||||||
func (r *mutationResolver) AddChapter(ctx context.Context, input input.ChapterAddInput) (models.Chapter, error) {
|
func (r *mutationResolver) AddChapter(ctx context.Context, input input.ChapterAddInput) (*models.Chapter, error) {
|
||||||
story, err := stories.FindID(input.StoryID)
|
story, err := stories.FindID(input.StoryID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Story not found")
|
return nil, errors.New("Story not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
if !token.Permitted("member", "story.add") {
|
if !token.Permitted("member", "story.add") {
|
||||||
return models.Chapter{}, errors.New("Unauthorized")
|
return nil, errors.New("Unauthorized")
|
||||||
}
|
}
|
||||||
|
|
||||||
author := token.UserID
|
author := token.UserID
|
||||||
if input.Author != nil && *input.Author != author {
|
if input.Author != nil && *input.Author != author {
|
||||||
if !token.Permitted("story.add") {
|
if !token.Permitted("story.add") {
|
||||||
return models.Chapter{}, errors.New("False pretender")
|
return nil, errors.New("False pretender")
|
||||||
}
|
}
|
||||||
|
|
||||||
author = *input.Author
|
author = *input.Author
|
||||||
}
|
}
|
||||||
|
|
||||||
if !story.Open && story.Author != author {
|
if !story.Open && story.Author != author {
|
||||||
return models.Chapter{}, errors.New("Story is not open")
|
return nil, errors.New("Story is not open")
|
||||||
}
|
}
|
||||||
|
|
||||||
commentMode := models.ChapterCommentModeDisabled
|
commentMode := models.ChapterCommentModeDisabled
|
||||||
@@ -54,40 +54,40 @@ func (r *mutationResolver) AddChapter(ctx context.Context, input input.ChapterAd
|
|||||||
commentMode = *input.CommentMode
|
commentMode = *input.CommentMode
|
||||||
}
|
}
|
||||||
|
|
||||||
chapter, err := chapters.Add(story, input.Title, author, input.Source, time.Now(), input.FictionalDate, commentMode)
|
chapter, err := chapters.Add(*story, input.Title, author, input.Source, time.Now(), input.FictionalDate, commentMode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Failed to create chapter: " + err.Error())
|
return nil, errors.New("Failed to create chapter: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Chapter", "add", token.UserID, story.Listed, changekeys.Listed(story, chapter), story, chapter)
|
go changes.Submit("Chapter", "add", token.UserID, story.Listed, changekeys.Listed(story, chapter), story, chapter)
|
||||||
|
|
||||||
return chapter, nil
|
return &chapter, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) MoveChapter(ctx context.Context, input input.ChapterMoveInput) (models.Chapter, error) {
|
func (r *mutationResolver) MoveChapter(ctx context.Context, input input.ChapterMoveInput) (*models.Chapter, error) {
|
||||||
chapter, err := chapters.FindID(input.ID)
|
chapter, err := chapters.FindID(input.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Chapter not found")
|
return nil, errors.New("Chapter not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
if !token.Authenticated() || !token.PermittedUser(chapter.Author, "member", "chapter.move") {
|
if !token.Authenticated() || !token.PermittedUser(chapter.Author, "member", "chapter.move") {
|
||||||
return models.Chapter{}, errors.New("You are not allowed to move this chapter")
|
return nil, errors.New("You are not allowed to move this chapter")
|
||||||
}
|
}
|
||||||
|
|
||||||
target, err := stories.FindID(input.StoryID)
|
target, err := stories.FindID(input.StoryID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Target story not found")
|
return nil, errors.New("Target story not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !target.Open && !token.PermittedUser(target.Author, "member", "chapter.move") {
|
if !target.Open && !token.PermittedUser(target.Author, "member", "chapter.move") {
|
||||||
return models.Chapter{}, errors.New("You are not permitted to move chapters to this story")
|
return nil, errors.New("You are not permitted to move chapters to this story")
|
||||||
}
|
}
|
||||||
|
|
||||||
oldStoryID := chapter.StoryID
|
oldStoryID := chapter.StoryID
|
||||||
chapter, err = chapters.Move(chapter, target)
|
chapter, err = chapters.Move(chapter, *target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Failed to move chapter: " + err.Error())
|
return nil, errors.New("Failed to move chapter: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
@@ -105,18 +105,18 @@ func (r *mutationResolver) MoveChapter(ctx context.Context, input input.ChapterM
|
|||||||
changes.Submit("Chapter", "move-in", token.UserID, story.Listed, changekeys.Listed(story, chapter), story, chapter)
|
changes.Submit("Chapter", "move-in", token.UserID, story.Listed, changekeys.Listed(story, chapter), story, chapter)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return chapter, nil
|
return &chapter, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) EditChapter(ctx context.Context, input input.ChapterEditInput) (models.Chapter, error) {
|
func (r *mutationResolver) EditChapter(ctx context.Context, input input.ChapterEditInput) (*models.Chapter, error) {
|
||||||
chapter, err := chapters.FindID(input.ID)
|
chapter, err := chapters.FindID(input.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Chapter not found")
|
return nil, errors.New("Chapter not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
if !token.Authenticated() || !token.PermittedUser(chapter.Author, "member", "chapter.edit") {
|
if !token.Authenticated() || !token.PermittedUser(chapter.Author, "member", "chapter.edit") {
|
||||||
return models.Chapter{}, errors.New("Unauthorized")
|
return nil, errors.New("Unauthorized")
|
||||||
}
|
}
|
||||||
|
|
||||||
if input.ClearFictionalDate != nil && *input.ClearFictionalDate == true {
|
if input.ClearFictionalDate != nil && *input.ClearFictionalDate == true {
|
||||||
@@ -125,7 +125,7 @@ func (r *mutationResolver) EditChapter(ctx context.Context, input input.ChapterE
|
|||||||
|
|
||||||
chapter, err = chapters.Edit(chapter, input.Title, input.Source, input.FictionalDate, input.CommentMode, input.CommentsLocked)
|
chapter, err = chapters.Edit(chapter, input.Title, input.Source, input.FictionalDate, input.CommentMode, input.CommentsLocked)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Failed to edit chapter: " + err.Error())
|
return nil, errors.New("Failed to edit chapter: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
@@ -137,28 +137,28 @@ func (r *mutationResolver) EditChapter(ctx context.Context, input input.ChapterE
|
|||||||
changes.Submit("Chapter", "edit", token.UserID, story.Listed, changekeys.Many(story, chapter), chapter)
|
changes.Submit("Chapter", "edit", token.UserID, story.Listed, changekeys.Many(story, chapter), chapter)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return chapter, nil
|
return &chapter, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) RemoveChapter(ctx context.Context, input input.ChapterRemoveInput) (models.Chapter, error) {
|
func (r *mutationResolver) RemoveChapter(ctx context.Context, input input.ChapterRemoveInput) (*models.Chapter, error) {
|
||||||
chapter, err := chapters.FindID(input.ID)
|
chapter, err := chapters.FindID(input.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Chapter not found")
|
return nil, errors.New("Chapter not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
if !token.Authenticated() || !token.PermittedUser(chapter.Author, "member", "chapter.remove") {
|
if !token.Authenticated() || !token.PermittedUser(chapter.Author, "member", "chapter.remove") {
|
||||||
return models.Chapter{}, errors.New("Unauthorized")
|
return nil, errors.New("Unauthorized")
|
||||||
}
|
}
|
||||||
|
|
||||||
chapter, err = chapters.Remove(chapter)
|
chapter, err = chapters.Remove(chapter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Failed to remove chapter: " + err.Error())
|
return nil, errors.New("Failed to remove chapter: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
err = comments.RemoveChapter(chapter)
|
err = comments.RemoveChapter(chapter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, errors.New("Chapter was removed, but comment removal failed: " + err.Error())
|
return nil, errors.New("Chapter was removed, but comment removal failed: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
@@ -170,5 +170,5 @@ func (r *mutationResolver) RemoveChapter(ctx context.Context, input input.Chapte
|
|||||||
changes.Submit("Chapter", "remove", token.UserID, story.Listed, changekeys.Many(story, chapter), chapter)
|
changes.Submit("Chapter", "remove", token.UserID, story.Listed, changekeys.Many(story, chapter), chapter)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return chapter, nil
|
return &chapter, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-29
@@ -15,7 +15,7 @@ import (
|
|||||||
"git.aiterp.net/rpdata/api/models/stories"
|
"git.aiterp.net/rpdata/api/models/stories"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (r *resolver) Story(ctx context.Context, id string) (models.Story, error) {
|
func (r *resolver) Story(ctx context.Context, id string) (*models.Story, error) {
|
||||||
return stories.FindID(id)
|
return stories.FindID(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,16 +38,16 @@ func (r *resolver) Stories(ctx context.Context, filter *stories.Filter) ([]model
|
|||||||
|
|
||||||
// Mutations
|
// Mutations
|
||||||
|
|
||||||
func (r *mutationResolver) AddStory(ctx context.Context, input input.StoryAddInput) (models.Story, error) {
|
func (r *mutationResolver) AddStory(ctx context.Context, input input.StoryAddInput) (*models.Story, error) {
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
if token == nil || !token.Permitted("member", "story.add") {
|
if token == nil || !token.Permitted("member", "story.add") {
|
||||||
return models.Story{}, errors.New("Permission denied")
|
return nil, errors.New("Permission denied")
|
||||||
}
|
}
|
||||||
|
|
||||||
author := token.UserID
|
author := token.UserID
|
||||||
if input.Author != nil && *input.Author != author {
|
if input.Author != nil && *input.Author != author {
|
||||||
if !token.Permitted("story.add") {
|
if !token.Permitted("story.add") {
|
||||||
return models.Story{}, errors.New("You are not permitted to add a story in another author's name")
|
return nil, errors.New("You are not permitted to add a story in another author's name")
|
||||||
}
|
}
|
||||||
|
|
||||||
author = *input.Author
|
author = *input.Author
|
||||||
@@ -63,7 +63,7 @@ func (r *mutationResolver) AddStory(ctx context.Context, input input.StoryAddInp
|
|||||||
|
|
||||||
story, err := stories.Add(input.Name, author, input.Category, listed, open, input.Tags, time.Now(), fictionalDate)
|
story, err := stories.Add(input.Name, author, input.Category, listed, open, input.Tags, time.Now(), fictionalDate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Failed to add story: " + err.Error())
|
return nil, errors.New("Failed to add story: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Story", "add", token.UserID, story.Listed, changekeys.Listed(story), story)
|
go changes.Submit("Story", "add", token.UserID, story.Listed, changekeys.Listed(story), story)
|
||||||
@@ -71,27 +71,27 @@ func (r *mutationResolver) AddStory(ctx context.Context, input input.StoryAddInp
|
|||||||
return story, nil
|
return story, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) AddStoryTag(ctx context.Context, input input.StoryTagAddInput) (models.Story, error) {
|
func (r *mutationResolver) AddStoryTag(ctx context.Context, input input.StoryTagAddInput) (*models.Story, error) {
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
|
|
||||||
story, err := stories.FindID(input.ID)
|
story, err := stories.FindID(input.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Story not found")
|
return nil, errors.New("Story not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
if story.Open {
|
if story.Open {
|
||||||
if !token.Permitted("member") {
|
if !token.Permitted("member") {
|
||||||
return models.Story{}, errors.New("You are not permitted to edit this story")
|
return nil, errors.New("You are not permitted to edit this story")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !token.PermittedUser(story.Author, "member", "story.edit") {
|
if !token.PermittedUser(story.Author, "member", "story.edit") {
|
||||||
return models.Story{}, errors.New("You are not permitted to edit this story")
|
return nil, errors.New("You are not permitted to edit this story")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
story, err = stories.AddTag(story, input.Tag)
|
story, err = stories.AddTag(*story, input.Tag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Failed to add story: " + err.Error())
|
return nil, errors.New("Failed to add story: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Story", "tag", token.UserID, story.Listed, changekeys.Listed(story), story, input.Tag)
|
go changes.Submit("Story", "tag", token.UserID, story.Listed, changekeys.Listed(story), story, input.Tag)
|
||||||
@@ -99,27 +99,27 @@ func (r *mutationResolver) AddStoryTag(ctx context.Context, input input.StoryTag
|
|||||||
return story, nil
|
return story, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) RemoveStoryTag(ctx context.Context, input input.StoryTagRemoveInput) (models.Story, error) {
|
func (r *mutationResolver) RemoveStoryTag(ctx context.Context, input input.StoryTagRemoveInput) (*models.Story, error) {
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
|
|
||||||
story, err := stories.FindID(input.ID)
|
story, err := stories.FindID(input.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Story not found")
|
return nil, errors.New("Story not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
if story.Open {
|
if story.Open {
|
||||||
if !token.Permitted("member") {
|
if !token.Permitted("member") {
|
||||||
return models.Story{}, errors.New("You are not permitted to edit this story")
|
return nil, errors.New("You are not permitted to edit this story")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !token.PermittedUser(story.Author, "member", "story.edit") {
|
if !token.PermittedUser(story.Author, "member", "story.edit") {
|
||||||
return models.Story{}, errors.New("You are not permitted to edit this story")
|
return nil, errors.New("You are not permitted to edit this story")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
story, err = stories.RemoveTag(story, input.Tag)
|
story, err = stories.RemoveTag(*story, input.Tag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Failed to add story: " + err.Error())
|
return nil, errors.New("Failed to add story: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Story", "untag", token.UserID, story.Listed, changekeys.Listed(story), story, input.Tag)
|
go changes.Submit("Story", "untag", token.UserID, story.Listed, changekeys.Listed(story), story, input.Tag)
|
||||||
@@ -127,25 +127,25 @@ func (r *mutationResolver) RemoveStoryTag(ctx context.Context, input input.Story
|
|||||||
return story, nil
|
return story, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) EditStory(ctx context.Context, input input.StoryEditInput) (models.Story, error) {
|
func (r *mutationResolver) EditStory(ctx context.Context, input input.StoryEditInput) (*models.Story, error) {
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
|
|
||||||
story, err := stories.FindID(input.ID)
|
story, err := stories.FindID(input.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Story not found")
|
return nil, errors.New("Story not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !token.PermittedUser(story.Author, "member", "story.edit") {
|
if !token.PermittedUser(story.Author, "member", "story.edit") {
|
||||||
return models.Story{}, errors.New("You are not permitted to remove this story")
|
return nil, errors.New("You are not permitted to remove this story")
|
||||||
}
|
}
|
||||||
|
|
||||||
if input.ClearFictionalDate != nil && *input.ClearFictionalDate {
|
if input.ClearFictionalDate != nil && *input.ClearFictionalDate {
|
||||||
input.FictionalDate = &time.Time{}
|
input.FictionalDate = &time.Time{}
|
||||||
}
|
}
|
||||||
|
|
||||||
story, err = stories.Edit(story, input.Name, input.Category, input.Listed, input.Open, input.FictionalDate)
|
story, err = stories.Edit(*story, input.Name, input.Category, input.Listed, input.Open, input.FictionalDate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Failed to add story: " + err.Error())
|
return nil, errors.New("Failed to add story: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Story", "edit", token.UserID, story.Listed, changekeys.Listed(story), story)
|
go changes.Submit("Story", "edit", token.UserID, story.Listed, changekeys.Listed(story), story)
|
||||||
@@ -153,26 +153,26 @@ func (r *mutationResolver) EditStory(ctx context.Context, input input.StoryEditI
|
|||||||
return story, nil
|
return story, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *mutationResolver) RemoveStory(ctx context.Context, input input.StoryRemoveInput) (models.Story, error) {
|
func (r *mutationResolver) RemoveStory(ctx context.Context, input input.StoryRemoveInput) (*models.Story, error) {
|
||||||
token := auth.TokenFromContext(ctx)
|
token := auth.TokenFromContext(ctx)
|
||||||
|
|
||||||
story, err := stories.FindID(input.ID)
|
story, err := stories.FindID(input.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Story not found")
|
return nil, errors.New("Story not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !token.PermittedUser(story.Author, "member", "story.remove") {
|
if !token.PermittedUser(story.Author, "member", "story.remove") {
|
||||||
return models.Story{}, errors.New("You are not permitted to remove this story")
|
return nil, errors.New("You are not permitted to remove this story")
|
||||||
}
|
}
|
||||||
|
|
||||||
story, err = stories.Remove(story)
|
story, err = stories.Remove(*story)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = chapters.RemoveStory(story)
|
err = chapters.RemoveStory(*story)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, errors.New("Failed to remove chapters, but story is removed: " + err.Error())
|
return nil, errors.New("Failed to remove chapters, but story is removed: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
go changes.Submit("Story", "remove", token.UserID, story.Listed, changekeys.Listed(story), story)
|
go changes.Submit("Story", "remove", token.UserID, story.Listed, changekeys.Listed(story), story)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package types
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"log"
|
||||||
|
|
||||||
"git.aiterp.net/rpdata/api/graph2/input"
|
"git.aiterp.net/rpdata/api/graph2/input"
|
||||||
"git.aiterp.net/rpdata/api/models"
|
"git.aiterp.net/rpdata/api/models"
|
||||||
@@ -12,9 +13,13 @@ type changeResolver struct{}
|
|||||||
func (r *changeResolver) Objects(ctx context.Context, obj *models.Change) ([]input.ChangeObject, error) {
|
func (r *changeResolver) Objects(ctx context.Context, obj *models.Change) ([]input.ChangeObject, error) {
|
||||||
objects := obj.Objects()
|
objects := obj.Objects()
|
||||||
|
|
||||||
results := make([]input.ChangeObject, len(objects))
|
results := make([]input.ChangeObject, 0, len(objects))
|
||||||
for i := range objects {
|
for _, object := range objects {
|
||||||
results[i] = objects[i]
|
if cObj, ok := object.(input.ChangeObject); ok {
|
||||||
|
results = append(results, cObj)
|
||||||
|
} else {
|
||||||
|
log.Printf("Warning: %T is not a change object", object)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return results, nil
|
return results, nil
|
||||||
|
|||||||
@@ -8,3 +8,8 @@ type Channel struct {
|
|||||||
EventName string `bson:"eventName,omitempty"`
|
EventName string `bson:"eventName,omitempty"`
|
||||||
LocationName string `bson:"locationName,omitempty"`
|
LocationName string `bson:"locationName,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Channel) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import (
|
|||||||
var ErrInvalidName = errors.New("Invalid channel name")
|
var ErrInvalidName = errors.New("Invalid channel name")
|
||||||
|
|
||||||
// Add creates a new channel.
|
// Add creates a new channel.
|
||||||
func Add(name string, logged, hub bool, event, location string) (models.Channel, error) {
|
func Add(name string, logged, hub bool, event, location string) (*models.Channel, error) {
|
||||||
if len(name) < 3 && !strings.HasPrefix(name, "#") {
|
if len(name) < 3 && !strings.HasPrefix(name, "#") {
|
||||||
return models.Channel{}, ErrInvalidName
|
return nil, ErrInvalidName
|
||||||
}
|
}
|
||||||
|
|
||||||
channel := models.Channel{
|
channel := models.Channel{
|
||||||
@@ -26,8 +26,8 @@ func Add(name string, logged, hub bool, event, location string) (models.Channel,
|
|||||||
|
|
||||||
err := collection.Insert(channel)
|
err := collection.Insert(channel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Channel{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return channel, nil
|
return &channel, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Edit edits a channels
|
// Edit edits a channels
|
||||||
func Edit(channel models.Channel, logged, hub *bool, eventName, locationName *string) (models.Channel, error) {
|
func Edit(channel models.Channel, logged, hub *bool, eventName, locationName *string) (*models.Channel, error) {
|
||||||
mutation := bson.M{}
|
mutation := bson.M{}
|
||||||
|
|
||||||
if logged != nil && *logged != channel.Logged {
|
if logged != nil && *logged != channel.Logged {
|
||||||
@@ -27,13 +27,13 @@ func Edit(channel models.Channel, logged, hub *bool, eventName, locationName *st
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(mutation) == 0 {
|
if len(mutation) == 0 {
|
||||||
return channel, nil
|
return &channel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
err := collection.UpdateId(channel.Name, bson.M{"$set": mutation})
|
err := collection.UpdateId(channel.Name, bson.M{"$set": mutation})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Channel{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return channel, nil
|
return &channel, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,22 +10,22 @@ import (
|
|||||||
|
|
||||||
// Ensure adds a channel if it doesn't exist. If logged is set and the found channel isn't logged,
|
// Ensure adds a channel if it doesn't exist. If logged is set and the found channel isn't logged,
|
||||||
// that is changed.
|
// that is changed.
|
||||||
func Ensure(name string, logged bool) (models.Channel, error) {
|
func Ensure(name string, logged bool) (*models.Channel, error) {
|
||||||
if len(name) < 3 && !strings.HasPrefix(name, "#") {
|
if len(name) < 3 && !strings.HasPrefix(name, "#") {
|
||||||
return models.Channel{}, ErrInvalidName
|
return nil, ErrInvalidName
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, err := FindName(name)
|
channel, err := FindName(name)
|
||||||
if err == mgo.ErrNotFound {
|
if err == mgo.ErrNotFound {
|
||||||
return Add(name, logged, false, "", "")
|
return Add(name, logged, false, "", "")
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return models.Channel{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if logged && !channel.Logged {
|
if logged && !channel.Logged {
|
||||||
channel, err = Edit(channel, &logged, nil, nil, nil)
|
channel, err = Edit(*channel, &logged, nil, nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Channel{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,12 @@ package channels
|
|||||||
import "git.aiterp.net/rpdata/api/models"
|
import "git.aiterp.net/rpdata/api/models"
|
||||||
|
|
||||||
// FindName finds a channel by its id (its name).
|
// FindName finds a channel by its id (its name).
|
||||||
func FindName(name string) (models.Channel, error) {
|
func FindName(name string) (*models.Channel, error) {
|
||||||
channel := models.Channel{}
|
channel := models.Channel{}
|
||||||
err := collection.FindId(name).One(&channel)
|
err := collection.FindId(name).One(&channel)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return channel, err
|
return &channel, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,3 +20,8 @@ type Chapter struct {
|
|||||||
func (chapter *Chapter) CanComment() bool {
|
func (chapter *Chapter) CanComment() bool {
|
||||||
return !chapter.CommentsLocked && chapter.CommentMode.IsEnabled()
|
return !chapter.CommentsLocked && chapter.CommentMode.IsEnabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Chapter) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Add adds a new chapter.
|
// Add adds a new chapter.
|
||||||
func Add(story models.Story, title, author, source string, createdDate time.Time, finctionalDate *time.Time, commentMode models.ChapterCommentMode) (models.Chapter, error) {
|
func Add(story models.Story, title, author, source string, createdDate time.Time, finctionalDate *time.Time, commentMode models.ChapterCommentMode) (*models.Chapter, error) {
|
||||||
chapter := models.Chapter{
|
chapter := models.Chapter{
|
||||||
ID: makeChapterID(),
|
ID: makeChapterID(),
|
||||||
StoryID: story.ID,
|
StoryID: story.ID,
|
||||||
@@ -27,7 +27,7 @@ func Add(story models.Story, title, author, source string, createdDate time.Time
|
|||||||
|
|
||||||
err := collection.Insert(chapter)
|
err := collection.Insert(chapter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if createdDate.After(story.UpdatedDate) {
|
if createdDate.After(story.UpdatedDate) {
|
||||||
@@ -36,5 +36,5 @@ func Add(story models.Story, title, author, source string, createdDate time.Time
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return chapter, nil
|
return &chapter, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,11 +13,14 @@ import (
|
|||||||
var collection *mgo.Collection
|
var collection *mgo.Collection
|
||||||
var storyCollection *mgo.Collection
|
var storyCollection *mgo.Collection
|
||||||
|
|
||||||
func find(query interface{}) (models.Chapter, error) {
|
func find(query interface{}) (*models.Chapter, error) {
|
||||||
chapter := models.Chapter{}
|
chapter := models.Chapter{}
|
||||||
err := collection.Find(query).One(&chapter)
|
err := collection.Find(query).One(&chapter)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return chapter, err
|
return &chapter, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func list(query interface{}) ([]models.Chapter, error) {
|
func list(query interface{}) ([]models.Chapter, error) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
|
|
||||||
// Edit edits a chapter, and updates EditedDate. While many Edit functions cheat if there's nothing to
|
// Edit edits a chapter, and updates EditedDate. While many Edit functions cheat if there's nothing to
|
||||||
// change, this functill will due to EditedDate.
|
// change, this functill will due to EditedDate.
|
||||||
func Edit(chapter models.Chapter, title, source *string, fictionalDate *time.Time, commentMode *models.ChapterCommentMode, commentsLocked *bool) (models.Chapter, error) {
|
func Edit(chapter models.Chapter, title, source *string, fictionalDate *time.Time, commentMode *models.ChapterCommentMode, commentsLocked *bool) (*models.Chapter, error) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
changes := bson.M{"editedDate": now}
|
changes := bson.M{"editedDate": now}
|
||||||
|
|
||||||
@@ -39,8 +39,8 @@ func Edit(chapter models.Chapter, title, source *string, fictionalDate *time.Tim
|
|||||||
|
|
||||||
err := collection.UpdateId(chapter.ID, bson.M{"$set": changes})
|
err := collection.UpdateId(chapter.ID, bson.M{"$set": changes})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return chapter, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return edited, nil
|
return &edited, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// FindID finds a chapter by ID
|
// FindID finds a chapter by ID
|
||||||
func FindID(id string) (models.Chapter, error) {
|
func FindID(id string) (*models.Chapter, error) {
|
||||||
return find(bson.M{"_id": id})
|
return find(bson.M{"_id": id})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Move updates the chapter, moving it to the given story.
|
// Move updates the chapter, moving it to the given story.
|
||||||
func Move(chapter models.Chapter, story models.Story) (models.Chapter, error) {
|
func Move(chapter models.Chapter, story models.Story) (*models.Chapter, error) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
|
||||||
err := collection.UpdateId(chapter.ID, bson.M{"$set": bson.M{"editedDate": now, "storyId": story.ID}})
|
err := collection.UpdateId(chapter.ID, bson.M{"$set": bson.M{"editedDate": now, "storyId": story.ID}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Chapter{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
chapter.EditedDate = now
|
chapter.EditedDate = now
|
||||||
@@ -24,5 +24,5 @@ func Move(chapter models.Chapter, story models.Story) (models.Chapter, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return chapter, nil
|
return &chapter, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Remove removes a chapter.
|
// Remove removes a chapter.
|
||||||
func Remove(chapter models.Chapter) (models.Chapter, error) {
|
func Remove(chapter models.Chapter) (*models.Chapter, error) {
|
||||||
if err := collection.RemoveId(chapter.ID); err != nil {
|
if err := collection.RemoveId(chapter.ID); err != nil {
|
||||||
return models.Chapter{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return chapter, nil
|
return chapter, nil
|
||||||
|
|||||||
@@ -29,3 +29,8 @@ func (character *Character) HasNick(nick string) bool {
|
|||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Character) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,3 +15,8 @@ type Comment struct {
|
|||||||
EditedDate time.Time `bson:"editeddDate"`
|
EditedDate time.Time `bson:"editeddDate"`
|
||||||
Source string `bson:"source"`
|
Source string `bson:"source"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Comment) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,3 +14,8 @@ type File struct {
|
|||||||
Author string `bson:"author" json:"author"`
|
Author string `bson:"author" json:"author"`
|
||||||
URL string `bson:"url,omitempty" json:"url,omitempty"`
|
URL string `bson:"url,omitempty" json:"url,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*File) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,3 +14,8 @@ type Log struct {
|
|||||||
Open bool `bson:"open"`
|
Open bool `bson:"open"`
|
||||||
CharacterIDs []string `bson:"characterIds"`
|
CharacterIDs []string `bson:"characterIds"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Log) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -12,3 +12,8 @@ type Post struct {
|
|||||||
Text string `bson:"text"`
|
Text string `bson:"text"`
|
||||||
Position int `bson:"position"`
|
Position int `bson:"position"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Post) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,19 +11,19 @@ import (
|
|||||||
var ErrTagAlreadyExists = errors.New("Tag already exists on story")
|
var ErrTagAlreadyExists = errors.New("Tag already exists on story")
|
||||||
|
|
||||||
// AddTag adds a tag to the story. It returns ErrTagAlreadyExists if the tag is already there
|
// AddTag adds a tag to the story. It returns ErrTagAlreadyExists if the tag is already there
|
||||||
func AddTag(story models.Story, tag models.Tag) (models.Story, error) {
|
func AddTag(story models.Story, tag models.Tag) (*models.Story, error) {
|
||||||
for i := range story.Tags {
|
for i := range story.Tags {
|
||||||
if story.Tags[i].Equal(tag) {
|
if story.Tags[i].Equal(tag) {
|
||||||
return models.Story{}, ErrTagAlreadyExists
|
return nil, ErrTagAlreadyExists
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := collection.UpdateId(story.ID, bson.M{"$push": bson.M{"tags": tag}})
|
err := collection.UpdateId(story.ID, bson.M{"$push": bson.M{"tags": tag}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
story.Tags = append(story.Tags, tag)
|
story.Tags = append(story.Tags, tag)
|
||||||
|
|
||||||
return story, nil
|
return &story, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Add creates a new story.
|
// Add creates a new story.
|
||||||
func Add(name, author string, category models.StoryCategory, listed, open bool, tags []models.Tag, createdDate, fictionalDate time.Time) (models.Story, error) {
|
func Add(name, author string, category models.StoryCategory, listed, open bool, tags []models.Tag, createdDate, fictionalDate time.Time) (*models.Story, error) {
|
||||||
story := models.Story{
|
story := models.Story{
|
||||||
ID: makeStoryID(),
|
ID: makeStoryID(),
|
||||||
Name: name,
|
Name: name,
|
||||||
@@ -23,8 +23,8 @@ func Add(name, author string, category models.StoryCategory, listed, open bool,
|
|||||||
|
|
||||||
err := collection.Insert(story)
|
err := collection.Insert(story)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return story, nil
|
return &story, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,14 @@ import (
|
|||||||
|
|
||||||
var collection *mgo.Collection
|
var collection *mgo.Collection
|
||||||
|
|
||||||
func find(query interface{}) (models.Story, error) {
|
func find(query interface{}) (*models.Story, error) {
|
||||||
story := models.Story{}
|
story := models.Story{}
|
||||||
err := collection.Find(query).One(&story)
|
err := collection.Find(query).One(&story)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return story, err
|
return &story, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func list(query interface{}, limit int) ([]models.Story, error) {
|
func list(query interface{}, limit int) ([]models.Story, error) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Edit edits the story and returns the edited story if it succeeds.
|
// Edit edits the story and returns the edited story if it succeeds.
|
||||||
func Edit(story models.Story, name *string, category *models.StoryCategory, listed, open *bool, fictionalDate *time.Time) (models.Story, error) {
|
func Edit(story models.Story, name *string, category *models.StoryCategory, listed, open *bool, fictionalDate *time.Time) (*models.Story, error) {
|
||||||
changes := bson.M{}
|
changes := bson.M{}
|
||||||
|
|
||||||
if name != nil && *name != story.Name {
|
if name != nil && *name != story.Name {
|
||||||
@@ -33,13 +33,13 @@ func Edit(story models.Story, name *string, category *models.StoryCategory, list
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(changes) == 0 {
|
if len(changes) == 0 {
|
||||||
return story, nil
|
return &story, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
err := collection.UpdateId(story.ID, bson.M{"$set": changes})
|
err := collection.UpdateId(story.ID, bson.M{"$set": changes})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return story, nil
|
return &story, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// FindID finds a story by ID
|
// FindID finds a story by ID
|
||||||
func FindID(id string) (models.Story, error) {
|
func FindID(id string) (*models.Story, error) {
|
||||||
return find(bson.M{"_id": id})
|
return find(bson.M{"_id": id})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
var ErrTagNotExists = errors.New("Tag does not exist on story")
|
var ErrTagNotExists = errors.New("Tag does not exist on story")
|
||||||
|
|
||||||
// RemoveTag removes a tag to the story. It returns ErrTagNotExists if the tag does not exist.
|
// RemoveTag removes a tag to the story. It returns ErrTagNotExists if the tag does not exist.
|
||||||
func RemoveTag(story models.Story, tag models.Tag) (models.Story, error) {
|
func RemoveTag(story models.Story, tag models.Tag) (*models.Story, error) {
|
||||||
index := -1
|
index := -1
|
||||||
for i := range story.Tags {
|
for i := range story.Tags {
|
||||||
if story.Tags[i].Equal(tag) {
|
if story.Tags[i].Equal(tag) {
|
||||||
@@ -20,15 +20,15 @@ func RemoveTag(story models.Story, tag models.Tag) (models.Story, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if index == -1 {
|
if index == -1 {
|
||||||
return models.Story{}, ErrTagNotExists
|
return nil, ErrTagNotExists
|
||||||
}
|
}
|
||||||
|
|
||||||
err := collection.UpdateId(story.ID, bson.M{"$pull": bson.M{"tags": tag}})
|
err := collection.UpdateId(story.ID, bson.M{"$pull": bson.M{"tags": tag}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Story{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
story.Tags = append(story.Tags[:index], story.Tags[index+1:]...)
|
story.Tags = append(story.Tags[:index], story.Tags[index+1:]...)
|
||||||
|
|
||||||
return story, nil
|
return &story, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Remove the story from the database
|
// Remove the story from the database
|
||||||
func Remove(story models.Story) (models.Story, error) {
|
func Remove(story models.Story) (*models.Story, error) {
|
||||||
return story, collection.RemoveId(story.ID)
|
return &story, collection.RemoveId(story.ID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,3 +16,8 @@ type Story struct {
|
|||||||
FictionalDate time.Time `bson:"fictionalDate,omitempty"`
|
FictionalDate time.Time `bson:"fictionalDate,omitempty"`
|
||||||
UpdatedDate time.Time `bson:"updatedDate"`
|
UpdatedDate time.Time `bson:"updatedDate"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Story) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,3 +10,8 @@ type Tag struct {
|
|||||||
func (tag *Tag) Equal(other Tag) bool {
|
func (tag *Tag) Equal(other Tag) bool {
|
||||||
return tag.Kind == other.Kind && tag.Name == other.Name
|
return tag.Kind == other.Kind && tag.Name == other.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsChangeObject is a dummy interface implementation
|
||||||
|
func (*Tag) IsChangeObject() {
|
||||||
|
// Dummy interface implementation
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user