summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jan.tuomi@valuemotive.com>2021-11-04 15:06:51 +0200
committerJan Tuomi <jan.tuomi@valuemotive.com>2021-11-04 15:06:51 +0200
commit56be711ee89a86c7ba7c01a361163823b1056e16 (patch)
treedddad6d69e02e93d58b6a19474b61a5a7c4fc0b8
parent0064b61e4b93285d006786ca0d964ecaaf677c29 (diff)
Prepare for release
-rw-r--r--.dockerignore4
-rw-r--r--Dockerfile12
-rw-r--r--docker-compose.yml16
-rw-r--r--main.js11
-rw-r--r--src/Config.elm12
-rw-r--r--src/Main.elm45
-rw-r--r--src/Types.elm7
7 files changed, 76 insertions, 31 deletions
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..e753a0d
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,4 @@
+.dockerignore
+node_modules
+dist/
+elm-stuff/
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..48631fb
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,12 @@
+FROM node:17 AS builder
+
+WORKDIR /app
+
+COPY package.json package-lock.json ./
+RUN npm ci --only-prod
+COPY . ./
+RUN npm run build
+
+FROM halverneus/static-file-server:latest AS server
+
+COPY --from=builder /app/dist /web
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..5904174
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+
+services:
+ api:
+ image: williamyeh/json-server:latest
+ command: --watch -p 80 /data/db.json
+ volumes:
+ - ./db.json:/data/db.json
+ ports:
+ - "5678:80"
+ somebook:
+ build:
+ context: .
+ image: registry.digitalocean.com/jan-systems-registry/somebook:latest
+ ports:
+ - "1234:8080"
diff --git a/main.js b/main.js
index a7aae91..bb4c7ab 100644
--- a/main.js
+++ b/main.js
@@ -97,10 +97,15 @@ window.onload = async() => {
const runElmApp = async() => {
try {
const user = await auth0.getUser();
+
+ const isProd = location.host.endsWith("jan.systems");
const flags = {
- email: user.email,
- name: user.name,
- pictureUrl: user.picture,
+ userData: {
+ email: user.email,
+ name: user.name,
+ pictureUrl: user.picture,
+ },
+ apiURL: isProd ? "https://bookapi.jan.systems" : "http://localhost:5678",
};
const app = Elm.Main.init({
diff --git a/src/Config.elm b/src/Config.elm
index 397bc38..95a15dd 100644
--- a/src/Config.elm
+++ b/src/Config.elm
@@ -1,22 +1,18 @@
module Config exposing (ApiResource(..), makeApiUrl)
+import Types exposing (Model)
import Utils exposing (templ)
-baseUrl : String
-baseUrl =
- "http://localhost:3000"
-
-
type ApiResource
= ApiPosts
| ApiLikePost String
| ApiCompose
-makeApiUrl : ApiResource -> String
-makeApiUrl res =
- String.replace "{baseUrl}" baseUrl <|
+makeApiUrl : Model -> ApiResource -> String
+makeApiUrl model res =
+ String.replace "{baseUrl}" model.apiURL <|
case res of
ApiPosts ->
"{baseUrl}/posts?_sort=createdAt&_order=desc"
diff --git a/src/Main.elm b/src/Main.elm
index 8182eb0..71cda11 100644
--- a/src/Main.elm
+++ b/src/Main.elm
@@ -12,12 +12,12 @@ import Pages.Feed exposing (feedView)
import RemoteData
import Task
import Time
-import Types exposing (Author, Model, Msg(..), Post, UserData)
+import Types exposing (Author, Flags, Model, Msg(..), Post)
import Url exposing (Url)
import Utils exposing (httpErrorToString, listFlat)
-main : Program UserData Model Msg
+main : Program Flags Model Msg
main =
Browser.application
{ init = init
@@ -43,16 +43,21 @@ port requestLogout : () -> Cmd msg
-- INIT
-init : UserData -> Url -> Key -> ( Model, Cmd Msg )
-init userData _ key =
- ( { now = Time.millisToPosix 0
- , key = key
- , userData = userData
- , posts = RemoteData.Loading
- , composeInputValue = ""
- }
+init : Flags -> Url -> Key -> ( Model, Cmd Msg )
+init flags _ key =
+ let
+ initModel =
+ { now = Time.millisToPosix 0
+ , key = key
+ , userData = flags.userData
+ , apiURL = flags.apiURL
+ , posts = RemoteData.Loading
+ , composeInputValue = ""
+ }
+ in
+ ( initModel
, Cmd.batch
- [ getPosts
+ [ getPosts initModel
, Task.perform SetNowPosix Time.now
]
)
@@ -75,7 +80,7 @@ update msg model =
( model, requestLogout () )
GetPosts ->
- ( model, getPosts )
+ ( model, getPosts model )
GotPosts (Result.Ok posts) ->
( { model | posts = RemoteData.Success posts }, Cmd.none )
@@ -86,7 +91,7 @@ update msg model =
)
LikePost post ->
- ( model, likePost post )
+ ( model, likePost model post )
LikedPost (Result.Ok post) ->
( { model | posts = RemoteData.map (replaceMatchingPost post) model.posts }
@@ -137,20 +142,20 @@ replaceMatchingPost post posts =
posts
-getPosts : Cmd Msg
-getPosts =
+getPosts : Model -> Cmd Msg
+getPosts model =
Http.get
- { url = makeApiUrl Config.ApiPosts
+ { url = makeApiUrl model Config.ApiPosts
, expect = Http.expectJson GotPosts postsDecoder
}
-likePost : Post -> Cmd Msg
-likePost post =
+likePost : Model -> Post -> Cmd Msg
+likePost model post =
Http.request
{ method = "PATCH"
, headers = []
- , url = makeApiUrl (Config.ApiLikePost post.id)
+ , url = makeApiUrl model (Config.ApiLikePost post.id)
, body =
Http.jsonBody
(Json.Encode.object
@@ -165,7 +170,7 @@ likePost post =
composePost : Model -> Cmd Msg
composePost model =
Http.post
- { url = makeApiUrl Config.ApiCompose
+ { url = makeApiUrl model Config.ApiCompose
, expect = Http.expectJson ComposedPost postDecoder
, body =
Http.jsonBody
diff --git a/src/Types.elm b/src/Types.elm
index d5068d6..2438932 100644
--- a/src/Types.elm
+++ b/src/Types.elm
@@ -10,11 +10,18 @@ type alias Model =
{ now : Time.Posix
, key : Key
, userData : UserData
+ , apiURL : String
, posts : RemoteData (List Post)
, composeInputValue : String
}
+type alias Flags =
+ { userData : UserData
+ , apiURL : String
+ }
+
+
type alias UserData =
{ name : String
, email : String