Skip to content

Commit

Permalink
Add missing reader model methods (#334)
Browse files Browse the repository at this point in the history
  • Loading branch information
rokasramas committed Jul 21, 2021
1 parent 54b41ca commit fa06a8f
Show file tree
Hide file tree
Showing 21 changed files with 319 additions and 136 deletions.
31 changes: 31 additions & 0 deletions api/resources/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ type Languages {
type ReaderFlag {
id: ID!
name: String!
flag: String
defaultUsage: Usage!
}

Expand Down Expand Up @@ -313,8 +314,16 @@ type Query {

### Reader

readerFlag(
id: ID!
): ReaderFlag!

readerFlags: ReaderFlags!

language(
id: Language!
): ReaderFlag!

languages: Languages!

### Dictionary
Expand Down Expand Up @@ -455,11 +464,33 @@ type Mutation {
defaultUsage: DefaultUsage!
): Phrase!

createReaderFlag(
id: ID!
name: String!
flag: String!
defaultUsage: Usage!
): ReaderFlag!

deleteReaderFlag(
id: ID!
): Boolean!

updateReaderFlagUsage(
id: ID!
usage: Usage!
): ReaderFlagUsage!

addLanguage(
id: Language!
name: String!
flag: String
defaultUsage: Usage!
): ReaderFlag!

deleteLanguage(
id: Language!
): Boolean!

updateLanguageUsage(
id: ID!
usage: Usage!
Expand Down
12 changes: 12 additions & 0 deletions api/src/api/graphql/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
:getDataFile :get-data-file
:dictionary :dictionary
:dictionaryItem :dictionary-item
:readerFlag :reader-flag
:readerFlags :reader-flags
:language :language
:languages :languages
:concepts :concepts
:concept :concept
Expand All @@ -41,7 +43,11 @@
:updatePhrase :update-phrase
:deletePhrase :delete-phrase
:updatePhraseDefaultUsage :update-phrase-default-usage
:createReaderFlag :create-reader-flag
:deleteReaderFlag :delete-reader-flag
:updateReaderFlagUsage :update-reader-flag-usage
:addLanguage :add-language
:deleteLanguage :delete-language
:updateLanguageUsage :update-language-usage
:createDataFile :create-data-file}}})
(util/attach-resolvers {:dictionary #'dictionary-domain/dictionary
Expand All @@ -53,9 +59,15 @@
:update-phrase #'dictionary-domain/update-phrase-text
:delete-phrase #'dictionary-domain/delete-phrase
:update-phrase-default-usage #'dictionary-domain/update-phrase-default-usage
:reader-flag #'reader-model-domain/reader-flag
:reader-flags #'reader-model-domain/reader-model
:create-reader-flag #'reader-model-domain/create-reader-flag
:delete-reader-flag #'reader-model-domain/delete-reader-flag
:update-reader-flag-usage #'reader-model-domain/update-reader-flag-usage
:language #'language-domain/language
:languages #'language-domain/language-model
:add-language #'language-domain/add-language
:delete-language #'language-domain/delete-language
:update-language-usage #'language-domain/update-language-usage
:document-plan #'document-plan-domain/get-document-plan
:document-plans #'document-plan-domain/list-document-plans
Expand Down
4 changes: 2 additions & 2 deletions api/src/api/graphql/domain/dictionary.clj
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@

(defn create-phrase [{:keys [auth-info]} {:keys [dictionaryItemId text defaultUsage]} _]
(if-let [item (dict-entity/get-dictionary-item dictionaryItemId)]
(let [phrase (translate-dict/text->phrase text dictionaryItemId (= :YES defaultUsage))]
(let [phrase (translate-dict/text->phrase text dictionaryItemId (= :YES defaultUsage) (:group-id auth-info))]
(-> item
(update ::dict-item/forms #(conj % phrase))
(dict-entity/update-dictionary-item (:group-id auth-info))
Expand All @@ -53,7 +53,7 @@
(resolve-as-not-found-dict-item dictionaryItemId)))

(defn update-phrase [{lang ::dict-item/language :as item} id group-id mut-fn translate?]
(let [translate-fn (if (true? translate?) #(rm-translate/phrase->schema % lang) identity)
(let [translate-fn (if (true? translate?) #(rm-translate/phrase->schema % lang group-id) identity)
updated-item (update item ::dict-item/forms #(map (fn [phrase]
(cond-> phrase
(= id (::dict-item-form/id phrase)) (mut-fn)))
Expand Down
22 changes: 16 additions & 6 deletions api/src/api/graphql/domain/language.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,30 @@
[clojure.string :as str]
[com.walmartlabs.lacinia.resolve :refer [resolve-as]]
[data.entities.dictionary :as dict-entity]
[data.entities.reader-model :as reader-model-entity]))
[data.entities.reader-model :as reader-model-entity]
[data.spec.reader-model :as reader-model]))

(defn language-model [_ _ _]
(defn language-model [{:keys [auth-info]} _ _]
(resolve-as
{:id "default"
:flags (map rm-translate/reader-model->reader-flag (reader-model-entity/available-languages))}))
:flags (map rm-translate/reader-model->reader-flag (reader-model-entity/available-languages (:group-id auth-info)))}))

(defn- resolve-as-not-found-language [id]
(resolve-as nil {:message (format "Cannot find language with code `%s`." id)}))

(defn language [_ {:keys [id]} _]
(if-let [item (reader-model-entity/fetch id)]
(defn language [{:keys [auth-info]} {:keys [id]} _]
(if-let [item (some #(when (= (::reader-model/code %) (name id)) %) (reader-model-entity/available-languages (:group-id auth-info)))]
(resolve-as (rm-translate/reader-model->reader-flag item))
(resolve-as-not-found-language id)))
(resolve-as-not-found-language (name id))))

(defn add-language [{:keys [auth-info]} args _]
(-> (rm-translate/reader-flag->reader-model :language args)
(reader-model-entity/update! (:group-id auth-info))
(rm-translate/reader-model->reader-flag)))

(defn delete-language [{:keys [auth-info]} {:keys [id]} _]
(reader-model-entity/delete! (name id) (:group-id auth-info))
(resolve-as true))

(defn update-language-usage [{:keys [auth-info]} {:keys [id usage]} _]
(if-let [item (dict-entity/get-dictionary-item (dict-domain/get-parent-id id))]
Expand Down
20 changes: 15 additions & 5 deletions api/src/api/graphql/domain/reader_model.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,31 @@
[clojure.string :as str]
[com.walmartlabs.lacinia.resolve :refer [resolve-as]]
[data.entities.dictionary :as dict-entity]
[data.entities.reader-model :as reader-model-entity]))
[data.entities.reader-model :as reader-model-entity]
[data.spec.reader-model :as reader-model]))

(defn reader-model [_ _ _]
(defn reader-model [{:keys [auth-info]} _ _]
(resolve-as
{:id "default"
:flags (map rm-translate/reader-model->reader-flag (reader-model-entity/available-readers))}))
:flags (map rm-translate/reader-model->reader-flag (reader-model-entity/available-readers (:group-id auth-info)))}))

(defn- resolve-as-not-found-reader-flag [id]
(resolve-as nil {:message (format "Cannot find reader flag with id `%s`." id)}))

(defn reader-flag [_ {:keys [id]} _]
(if-let [item (reader-model-entity/fetch id)]
(defn reader-flag [{:keys [auth-info]} {:keys [id]} _]
(if-let [item (some #(when (= (::reader-model/code %) id) %) (reader-model-entity/available-readers (:group-id auth-info)))]
(resolve-as (rm-translate/reader-model->reader-flag item))
(resolve-as-not-found-reader-flag id)))

(defn create-reader-flag [{:keys [auth-info]} args _]
(-> (rm-translate/reader-flag->reader-model :reader args)
(reader-model-entity/update! (:group-id auth-info))
(rm-translate/reader-model->reader-flag)))

(defn delete-reader-flag [{:keys [auth-info]} {:keys [id]} _]
(reader-model-entity/delete! id (:group-id auth-info))
(resolve-as true))

(defn update-reader-flag-usage [{:keys [auth-info]} {:keys [id usage]} _]
(if-let [item (dict-entity/get-dictionary-item (dict-domain/get-parent-id id))]
(let [[parent-part phrase-part flag-id] (str/split id #"/")
Expand Down
12 changes: 6 additions & 6 deletions api/src/api/graphql/translate/dictionary.clj
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@
[data.utils :as utils]))

(defn text->phrase
([text parent-id default-usage]
(text->phrase text parent-id default-usage (reader-model/available-languages)))
([text _ _ _]
([text parent-id default-usage group-id]
(text->phrase text parent-id default-usage (reader-model/available-languages group-id) group-id))
([text _ _ _ _]
#::dict-item-form{:id (utils/gen-uuid) :value text}))

(defn build-reader-model-user-flags [lang]
(defn build-reader-model-user-flags [lang group-id]
(map (fn [{:data.spec.reader-model/keys [code name enabled?]}]
{:id (utils/gen-uuid)
:usage (if (= code lang) "YES" "NO")
:flag {:id code
:name name
:defaultUsage (if enabled? "YES" "NO")}})
(reader-model/available-languages)))
(reader-model/available-languages group-id)))

(defn get-concept [attributes group-id]
(when-let [concept-name (some #(when (= "Concept" (::dict-item-attr/name %))
Expand All @@ -42,7 +42,7 @@
{:id id
:text value
:defaultUsage (if default? "YES" "NO")
:readerFlagUsage (build-reader-model-user-flags language)})
:readerFlagUsage (build-reader-model-user-flags language group-id)})
forms)
:concept (get-concept attributes group-id)
:attributes (map (fn [{::dict-item-attr/keys [id name value]}]
Expand Down
28 changes: 25 additions & 3 deletions api/src/api/graphql/translate/reader_model.clj
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,36 @@
:flag {:id (name k)
:name (name k)}})

(defn phrase->schema [{::dict-item-form/keys [id value default?] :as phrase} language]
(defn phrase->schema [{::dict-item-form/keys [id value default?] :as phrase} language group-id]
(log/tracef "Phrase: %s" phrase)
{:id id
:text value
:defaultUsage (if default? "YES" "NO")
:readerFlagUsage (dict-translate/build-reader-model-user-flags language)})
:readerFlagUsage (dict-translate/build-reader-model-user-flags language group-id)})

(defn reader-model->reader-flag [{::reader-model/keys [code name enabled?]}]
(defn reader-model->reader-flag [{::reader-model/keys [code name flag enabled?]}]
{:id code
:name name
:flag flag
:defaultUsage (if (true? enabled?) "YES" "NO")})

(defn get-language-flag [code]
(case (keyword code)
:Eng "🇬🇧"
:Ger "🇩🇪"
:Est "🇪🇪"
:Lav "🇱🇻"
:Lit "🇱🇹"
:Rus "🇷🇺"
:Spa "🇪🇸"
"🏳️"))

(defn reader-flag->reader-model [type {:keys [id flag defaultUsage] :as args}]
#::reader-model{:code (name id)
:name (:name args)
:flag (if (and (= :language type) (nil? flag))
(get-language-flag id)
flag)
:type type
:enabled? (= :YES defaultUsage)
:available? true})
3 changes: 2 additions & 1 deletion api/src/api/nlg/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
[data.entities.dictionary :refer [build-dictionaries]]
[data.entities.results :as results]
[data.entities.reader-model :refer [available-reader-model]]
[data.entities.user-group :as user-group]
[data.spec.reader-model :as reader-model]
[data.spec.result :as result]
[data.spec.result.annotation :as annotation]
Expand Down Expand Up @@ -47,7 +48,7 @@
:readers (set (map ::reader-model/code reader))}))

(defn generate-text
[{:keys [id document-plan data reader-model] :or {id (utils/gen-uuid) data {} reader-model (available-reader-model)}}]
[{:keys [id document-plan data reader-model] :or {id (utils/gen-uuid) data {} reader-model (available-reader-model user-group/DUMMY-USER-GROUP-ID)}}]
(let [{:keys [languages readers]} (select-enabled-readers reader-model)
semantic-graph (document-plan->semantic-graph document-plan)
amrs (find-amrs semantic-graph)
Expand Down
30 changes: 15 additions & 15 deletions api/src/api/nlg/format.clj
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@
:id "ENRICHED"
:text "📙"})

(defn get-lang-flag [code]
(defn get-lang-flag [code group-id]
{:type "FLAG"
:id code
:text (or (::reader-model/flag (reader-model-entity/fetch code)) "🏳️")})
:text (or (::reader-model/flag (reader-model-entity/fetch code group-id)) "🏳️")})

(defn get-reader-flag [code]
(when-let [reader (reader-model-entity/fetch code)]
(defn get-reader-flag [code group-id]
(when-let [reader (reader-model-entity/fetch code group-id)]
{:type "FLAG"
:id code
:text (::reader-model/flag reader)}))

(defn get-flags [{::row/keys [language enriched? readers]}]
(cond-> (cons (get-lang-flag language) (filter some? (map get-reader-flag readers)))
(defn get-flags [{::row/keys [language enriched? readers]} group-id]
(cond-> (cons (get-lang-flag language group-id) (filter some? (map #(get-reader-flag % group-id) readers)))
(true? enriched?) (conj enriched-flag)))

(defn split-into-paragraphs [annotations]
Expand All @@ -49,9 +49,9 @@
(cond-> [] (not (str/blank? text)) (conj (assoc ann ::annotation/text text))))
(conj segment ann)))))))

(defn ->annotated-text-format [{rows ::result/rows}]
(defn ->annotated-text-format [{rows ::result/rows} group-id]
(map (fn [{annotations ::row/annotations :as row}]
(let [flags (when (show-flags?) (get-flags row))]
(let [flags (when (show-flags?) (get-flags row group-id))]
{:type "ANNOTATED_TEXT"
:id (utils/gen-uuid)
:annotations []
Expand All @@ -72,9 +72,9 @@
paragraph-annotations))}]})))}))
rows))

(defn ->annotated-text-shallow-format [{rows ::result/rows}]
(defn ->annotated-text-shallow-format [{rows ::result/rows} group-id]
(map (fn [{text ::row/text :as row}]
(let [flags (when (show-flags?) (str/join " " (map :text (get-flags row))))]
(let [flags (when (show-flags?) (str/join " " (map :text (get-flags row group-id))))]
{:type "ANNOTATED_TEXT"
:id (utils/gen-uuid)
:annotations []
Expand Down Expand Up @@ -103,12 +103,12 @@
(defn ->raw-format [{::result/keys [rows]}]
(map #(str/replace (::row/text %) #"\s*\n+\s*" "\n") rows))

(defn use-format [format-type result]
(defn use-format [format-type result group-id]
(case format-type
"raw" (->raw-format result)
"annotated-text" (->annotated-text-format result)
"annotated-text-shallow" (->annotated-text-shallow-format result)
"annotated-text" (->annotated-text-format result group-id)
"annotated-text-shallow" (->annotated-text-shallow-format result group-id)
"error" (->error result)))

(defn with-default-format [result]
(use-format default-format-type result))
(defn with-default-format [result group-id]
(use-format default-format-type result group-id))
Loading

0 comments on commit fa06a8f

Please sign in to comment.