From 2fdc83fa47b33293bddaccb43e759b4187af3fb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tadeusz=20Miesi=C4=85c?= <tadeusz.miesiac@gmail.com>
Date: Thu, 28 Sep 2023 12:58:33 +0200
Subject: [PATCH] feat(drug schema): added drug schema to models

---
 src/models/drugSchema.ts              | 19 +++++++++++++++++++
 src/models/referenceSchema.ts         | 18 ++++++++++++++++++
 src/models/targetElementSchema.ts     |  7 +++++++
 src/models/targetParticipantSchema.ts |  9 +++++++++
 src/models/targetSchema.ts            | 15 +++++++++++++++
 5 files changed, 68 insertions(+)
 create mode 100644 src/models/drugSchema.ts
 create mode 100644 src/models/referenceSchema.ts
 create mode 100644 src/models/targetElementSchema.ts
 create mode 100644 src/models/targetParticipantSchema.ts
 create mode 100644 src/models/targetSchema.ts

diff --git a/src/models/drugSchema.ts b/src/models/drugSchema.ts
new file mode 100644
index 00000000..346dfa96
--- /dev/null
+++ b/src/models/drugSchema.ts
@@ -0,0 +1,19 @@
+import { z } from 'zod';
+import { referenceSchema } from './referenceSchema';
+import { targetSchema } from './targetSchema';
+
+export const drugSchema = z.object({
+  /** identifier of the chemical */
+  id: z.string(),
+  name: z.string(),
+  description: z.string(),
+  /** list of synonyms  */
+  synonyms: z.array(z.string()),
+  brandNames: z.array(z.string()),
+  /** does drug cross blood brain barrier */
+  bloodBrainBarrier: z.string(),
+  /** list of references */
+  references: z.array(referenceSchema),
+  /** list of targets */
+  targets: z.array(targetSchema),
+});
diff --git a/src/models/referenceSchema.ts b/src/models/referenceSchema.ts
new file mode 100644
index 00000000..029c6ecb
--- /dev/null
+++ b/src/models/referenceSchema.ts
@@ -0,0 +1,18 @@
+import { z } from 'zod';
+
+export const referenceSchema = z.object({
+  link: z.string(),
+  article: z.object({
+    title: z.string(),
+    authors: z.array(z.string()),
+    journal: z.string(),
+    year: z.number(),
+    link: z.string(),
+    pubmedId: z.string(),
+    citationCount: z.number(),
+  }),
+  type: z.string(),
+  resource: z.string(),
+  id: z.number(),
+  annotatorClassName: z.string(),
+});
diff --git a/src/models/targetElementSchema.ts b/src/models/targetElementSchema.ts
new file mode 100644
index 00000000..090be95c
--- /dev/null
+++ b/src/models/targetElementSchema.ts
@@ -0,0 +1,7 @@
+import { z } from 'zod';
+
+export const targetElementSchema = z.object({
+  id: z.number(),
+  modelId: z.number(),
+  type: z.string(),
+});
diff --git a/src/models/targetParticipantSchema.ts b/src/models/targetParticipantSchema.ts
new file mode 100644
index 00000000..fbf82147
--- /dev/null
+++ b/src/models/targetParticipantSchema.ts
@@ -0,0 +1,9 @@
+import { z } from 'zod';
+
+export const targetParticipantSchema = z.object({
+  link: z.string(),
+  type: z.string(),
+  resource: z.string(),
+  id: z.number(),
+  annotatorClassName: z.string(),
+});
diff --git a/src/models/targetSchema.ts b/src/models/targetSchema.ts
new file mode 100644
index 00000000..bda0bfca
--- /dev/null
+++ b/src/models/targetSchema.ts
@@ -0,0 +1,15 @@
+import { z } from 'zod';
+import { referenceSchema } from './referenceSchema';
+import { targetElementSchema } from './targetElementSchema';
+import { targetParticipantSchema } from './targetParticipantSchema';
+
+export const targetSchema = z.object({
+  /** target name */
+  name: z.string(),
+  /** list of target references */
+  references: z.array(referenceSchema),
+  /**  list of elements on the map associated with this target */
+  targetElements: z.array(targetElementSchema),
+  /** list of identifiers associated with this target */
+  targetParticipants: z.array(targetParticipantSchema),
+});
-- 
GitLab