Skip to content

Commit

Permalink
408 vue should not reference domain entities directly (#409)
Browse files Browse the repository at this point in the history
* Replaced domain imports with ViewModels

* Version bump
  • Loading branch information
mlhaufe authored Oct 28, 2024
1 parent ff40f5d commit 6162816
Show file tree
Hide file tree
Showing 22 changed files with 342 additions and 124 deletions.
14 changes: 11 additions & 3 deletions components/XDataTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,21 @@ import type Dialog from 'primevue/dialog'
import type DataTable from 'primevue/datatable'
import { FilterMatchMode } from 'primevue/api';
import camelCaseToTitle from '~/utils/camelCaseToTitle.js';
import { AuditLog } from '~/domain/application/index.js';
export type ViewFieldType = 'text' | 'textarea' | 'number' | 'date' | 'boolean' | 'hidden' | 'object'
export type FormFieldType = 'text' | 'textarea' | { type: 'number', min: number, max: number } | 'date' | 'boolean' | 'hidden' | string[]
| { type: 'requirement', options: { id: string, name: string }[] }
interface AuditLogViewModel {
id: string;
entityId: string;
entityName: string;
entity: string;
organizationSlug: string;
createdAt: Date;
}
const props = defineProps<{
datasource: RowType[] | null,
entityName: string,
Expand Down Expand Up @@ -60,7 +68,7 @@ const openEditDialog = (item: RowType) => {
const openRecycleDialog = async () => {
recycleDialogLoading.value = true
recycleDialogVisible.value = true
const recycleBinItems = (await $fetch<AuditLog[]>(`/api/audit-log/deleted`, {
const recycleBinItems = (await $fetch<AuditLogViewModel[]>(`/api/audit-log/deleted`, {
method: 'GET',
query: {
entityName: props.entityName,
Expand All @@ -78,7 +86,7 @@ const openRecycleDialog = async () => {
const openHistoryDialog = async (item: RowType) => {
historyDialogLoading.value = true
historyDialogVisible.value = true
const auditLog = (await $fetch<AuditLog[]>(`/api/audit-log`, {
const auditLog = (await $fetch<AuditLogViewModel[]>(`/api/audit-log`, {
method: 'GET',
query: {
entityId: item.id,
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@final-hill/cathedral",
"version": "0.17.0",
"version": "0.18.0",
"description": "Requirements management system",
"keywords": [],
"private": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<script lang="ts" setup>
import { useFetch } from 'nuxt/app';
import { Assumption } from '~/domain/requirements/Assumption.js';
useHead({ title: 'Assumptions' })
definePageMeta({ name: 'Assumptions' })
Expand All @@ -18,18 +17,25 @@ const { $eventBus } = useNuxtApp(),
if (getSolutionError.value)
$eventBus.$emit('page-error', getSolutionError.value);
const { data: assumptions, refresh, status, error: getAssumptionsError } = await useFetch<Assumption[]>(`/api/assumption`, {
interface AssumptionViewModel {
id: string,
name: string,
description: string,
lastModified: Date
};
const { data: assumptions, refresh, status, error: getAssumptionsError } = await useFetch<AssumptionViewModel[]>(`/api/assumption`, {
query: { solutionId },
transform: (data) => data.map((item) => {
item.lastModified = new Date(item.lastModified)
return item
})
transform: (data) => data.map((item) => ({
...item,
lastModified: new Date(item.lastModified)
}))
})
if (getAssumptionsError.value)
$eventBus.$emit('page-error', getAssumptionsError.value);
const onCreate = async (data: Assumption) => {
const onCreate = async (data: AssumptionViewModel) => {
await $fetch(`/api/assumption`, {
method: 'post',
body: {
Expand All @@ -52,7 +58,7 @@ const onDelete = async (id: string) => {
refresh()
}
const onUpdate = async (data: Assumption) => {
const onUpdate = async (data: AssumptionViewModel) => {
await $fetch(`/api/assumption/${data.id}`, {
method: 'put',
body: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
<script lang="ts" setup>
import { EnvironmentComponent } from '~/domain/requirements/EnvironmentComponent.js';
import { useHead, useRoute, useNuxtApp, useFetch } from '#imports';
useHead({ title: 'Components' })
definePageMeta({ name: 'Environment Components' })
interface EnvironmentComponentViewModel {
id: string;
name: string;
description: string;
lastModified: Date;
}
const { $eventBus } = useNuxtApp(),
{ solutionslug, organizationslug } = useRoute('Environment Components').params,
{ data: solutions, error: getSolutionError } = await useFetch('/api/solution', {
Expand All @@ -13,7 +20,7 @@ const { $eventBus } = useNuxtApp(),
}
}),
solutionId = solutions.value?.[0].id,
{ data: environmentComponents, status, refresh, error: getEnvironmentComponentsError } = await useFetch<EnvironmentComponent[]>(`/api/environment-component`, {
{ data: environmentComponents, status, refresh, error: getEnvironmentComponentsError } = await useFetch<EnvironmentComponentViewModel[]>(`/api/environment-component`, {
query: { solutionId },
transform: (data) => data.map((item) => {
item.lastModified = new Date(item.lastModified)
Expand All @@ -27,7 +34,7 @@ if (getSolutionError.value)
if (getEnvironmentComponentsError.value)
$eventBus.$emit('page-error', getEnvironmentComponentsError.value)
const onCreate = async (data: EnvironmentComponent) => {
const onCreate = async (data: EnvironmentComponentViewModel) => {
await $fetch(`/api/environment-component`, {
method: 'POST',
body: {
Expand All @@ -48,7 +55,7 @@ const onDelete = async (id: string) => {
refresh()
}
const onUpdate = async (data: EnvironmentComponent) => {
const onUpdate = async (data: EnvironmentComponentViewModel) => {
await $fetch(`/api/environment-component/${data.id}`, {
method: 'PUT',
body: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
<script lang="ts" setup>
import { useFetch } from 'nuxt/app';
import { Constraint } from '~/domain/requirements/Constraint.js';
import { ConstraintCategory } from '~/domain/requirements/ConstraintCategory.js';
useHead({ title: 'Constraints' })
definePageMeta({ name: 'Constraints' })
interface ConstraintViewModel {
id: string;
name: string;
description: string;
category: ConstraintCategory;
lastModified: Date;
}
const { $eventBus } = useNuxtApp(),
{ solutionslug, organizationslug } = useRoute('Constraints').params,
{ data: solutions, error: getSolutionError } = await useFetch('/api/solution', {
Expand All @@ -16,7 +23,7 @@ const { $eventBus } = useNuxtApp(),
}),
solution = (solutions.value ?? [])[0],
solutionId = solution.id,
{ data: constraints, status, refresh, error: getConstraintsError } = await useFetch<Constraint[]>(`/api/constraint`, {
{ data: constraints, status, refresh, error: getConstraintsError } = await useFetch<ConstraintViewModel[]>(`/api/constraint`, {
query: { solutionId },
transform: (data) => data.map((item) => {
item.lastModified = new Date(item.lastModified)
Expand All @@ -30,7 +37,7 @@ if (getSolutionError.value)
if (getConstraintsError.value)
$eventBus.$emit('page-error', getConstraintsError.value)
const onCreate = async (data: Constraint) => {
const onCreate = async (data: ConstraintViewModel) => {
await $fetch(`/api/constraint`, {
method: 'POST',
body: {
Expand All @@ -52,7 +59,7 @@ const onDelete = async (id: string) => {
refresh()
}
const onUpdate = async (data: Constraint) => {
const onUpdate = async (data: ConstraintViewModel) => {
await $fetch(`/api/constraint/${data.id}`, {
method: 'PUT',
body: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
<script lang="ts" setup>
import { Effect } from '~/domain/requirements/Effect.js';
interface EffectViewModel {
id: string;
name: string;
description: string;
lastModified: Date;
};
useHead({ title: 'Effects' })
definePageMeta({ name: 'Effects' })
Expand All @@ -17,18 +23,18 @@ const { $eventBus } = useNuxtApp(),
if (getSolutionError.value)
$eventBus.$emit('page-error', getSolutionError.value)
const { data: effects, refresh, status, error: getEffectsError } = await useFetch<Effect[]>(`/api/effect`, {
const { data: effects, refresh, status, error: getEffectsError } = await useFetch<EffectViewModel[]>(`/api/effect`, {
query: { solutionId },
transform: (data) => data.map((item) => {
item.lastModified = new Date(item.lastModified)
return item
})
transform: (data) => data.map((item) => ({
...item,
lastModified: new Date(item.lastModified)
}))
})
if (getEffectsError.value)
$eventBus.$emit('page-error', getEffectsError.value)
const onCreate = async (data: Effect) => {
const onCreate = async (data: EffectViewModel) => {
await $fetch(`/api/effect`, {
method: 'POST',
body: {
Expand All @@ -40,7 +46,7 @@ const onCreate = async (data: Effect) => {
refresh()
}
const onUpdate = async (data: Effect) => {
const onUpdate = async (data: EffectViewModel) => {
await $fetch(`/api/effect/${data.id}`, {
method: 'PUT',
body: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
<script lang="ts" setup>
import { GlossaryTerm } from '~/domain/requirements/GlossaryTerm.js';
type GlossaryTermViewModel = {
id: string;
name: string;
description: string;
lastModified: Date;
};
useHead({ title: 'Glossary' })
definePageMeta({ name: 'Glossary' })
Expand All @@ -17,7 +22,7 @@ const { $eventBus } = useNuxtApp(),
if (getSolutionError.value)
$eventBus.$emit('page-error', getSolutionError.value);
const { data: glossaryTerms, refresh, status, error: getGlossaryTermsError } = await useFetch<GlossaryTerm[]>(`/api/glossary-term`, {
const { data: glossaryTerms, refresh, status, error: getGlossaryTermsError } = await useFetch<GlossaryTermViewModel[]>(`/api/glossary-term`, {
query: { solutionId },
transform: (data) => data.map((item) => {
item.lastModified = new Date(item.lastModified)
Expand All @@ -28,7 +33,7 @@ const { data: glossaryTerms, refresh, status, error: getGlossaryTermsError } = a
if (getGlossaryTermsError.value)
$eventBus.$emit('page-error', getGlossaryTermsError.value)
const onCreate = async (data: GlossaryTerm) => {
const onCreate = async (data: GlossaryTermViewModel) => {
await $fetch(`/api/glossary-term`, {
method: 'POST',
body: {
Expand All @@ -41,7 +46,7 @@ const onCreate = async (data: GlossaryTerm) => {
refresh()
}
const onUpdate = async (data: GlossaryTerm) => {
const onUpdate = async (data: GlossaryTermViewModel) => {
await $fetch(`/api/glossary-term/${data.id}`, {
method: 'PUT',
body: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
<script lang="ts" setup>
import { Invariant } from '~/domain/requirements/Invariant.js';
interface InvariantViewModel {
id: string;
name: string;
description: string;
lastModified: Date;
}
useHead({ title: 'Invariants' })
definePageMeta({ name: 'Invariants' })
Expand All @@ -17,7 +22,7 @@ const { $eventBus } = useNuxtApp(),
if (getSolutionError.value)
$eventBus.$emit('page-error', getSolutionError.value)
const { data: invariants, refresh, status, error: getInvariantsError } = await useFetch<Invariant[]>(`/api/invariant`, {
const { data: invariants, refresh, status, error: getInvariantsError } = await useFetch<InvariantViewModel[]>(`/api/invariant`, {
query: { solutionId },
transform: (data) => data.map((item) => {
item.lastModified = new Date(item.lastModified)
Expand All @@ -28,7 +33,7 @@ const { data: invariants, refresh, status, error: getInvariantsError } = await u
if (getInvariantsError.value)
$eventBus.$emit('page-error', getInvariantsError.value)
const onCreate = async (data: Invariant) => {
const onCreate = async (data: InvariantViewModel) => {
await useFetch(`/api/invariant`, {
method: 'POST',
body: {
Expand All @@ -41,7 +46,7 @@ const onCreate = async (data: Invariant) => {
refresh()
}
const onUpdate = async (data: Invariant) => {
const onUpdate = async (data: InvariantViewModel) => {
await useFetch(`/api/invariant/${data.id}`, {
method: 'PUT', body: {
id: data.id,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
<script lang="ts" setup>
import { FunctionalBehavior } from '~/domain/requirements/FunctionalBehavior.js';
import { MoscowPriority } from '~/domain/requirements/MoscowPriority.js';
useHead({ title: 'Functionality' })
definePageMeta({ name: 'Goals Functionality' })
interface FunctionalBehaviorViewModel {
id: string;
name: string;
description: string;
lastModified: Date;
}
const { $eventBus } = useNuxtApp(),
{ solutionslug, organizationslug } = useRoute('Functionality').params,
{ data: solutions, error: getSolutionError } = await useFetch(`/api/solution`, {
Expand All @@ -18,7 +24,7 @@ const { $eventBus } = useNuxtApp(),
if (getSolutionError.value)
$eventBus.$emit('page-error', getSolutionError.value)
const { data: functionalBehaviors, refresh, status, error: getFunctionalBehaviorsError } = await useFetch<FunctionalBehavior[]>(`/api/functional-behavior`, {
const { data: functionalBehaviors, refresh, status, error: getFunctionalBehaviorsError } = await useFetch<FunctionalBehaviorViewModel[]>(`/api/functional-behavior`, {
query: { solutionId },
transform: (data) => data.map((item) => {
item.lastModified = new Date(item.lastModified)
Expand All @@ -29,7 +35,7 @@ const { data: functionalBehaviors, refresh, status, error: getFunctionalBehavior
if (getFunctionalBehaviorsError.value)
$eventBus.$emit('page-error', getFunctionalBehaviorsError.value);
const onCreate = async (data: FunctionalBehavior) => {
const onCreate = async (data: FunctionalBehaviorViewModel) => {
await $fetch(`/api/functional-behavior`, {
method: 'POST',
body: {
Expand All @@ -42,7 +48,7 @@ const onCreate = async (data: FunctionalBehavior) => {
refresh()
}
const onUpdate = async (data: FunctionalBehavior) => {
const onUpdate = async (data: FunctionalBehaviorViewModel) => {
await $fetch(`/api/functional-behavior/${data.id}`, {
method: 'PUT',
body: {
Expand Down
Loading

0 comments on commit 6162816

Please sign in to comment.