Init DB and Tests with Components

- add Artikel, Kauf, Kategorie Model
- generate Components
- playing with custom components
- add Tailwindcss
This commit is contained in:
Simon Zeyer
2023-11-05 21:35:01 +00:00
parent 7d40cbd7d5
commit 9a26d97209
76 changed files with 3308 additions and 32 deletions
@@ -0,0 +1,24 @@
-- CreateTable
CREATE TABLE "artikel" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL,
"preis" REAL
);
-- CreateTable
CREATE TABLE "kauf" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"timestamp" INTEGER NOT NULL,
"preis_ges" REAL
);
-- CreateTable
CREATE TABLE "kauf_artikel" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"kauf_id" INTEGER NOT NULL,
"artikel_id" INTEGER NOT NULL,
"anzahl" INTEGER NOT NULL
);
-- CreateIndex
CREATE UNIQUE INDEX "artikel_name_key" ON "artikel"("name");
@@ -0,0 +1,49 @@
/*
Warnings:
- You are about to drop the `artikel` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `kauf` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `kauf_artikel` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropTable
PRAGMA foreign_keys=off;
DROP TABLE "artikel";
PRAGMA foreign_keys=on;
-- DropTable
PRAGMA foreign_keys=off;
DROP TABLE "kauf";
PRAGMA foreign_keys=on;
-- DropTable
PRAGMA foreign_keys=off;
DROP TABLE "kauf_artikel";
PRAGMA foreign_keys=on;
-- CreateTable
CREATE TABLE "Kauf_Artikel" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"kauf_id" INTEGER NOT NULL,
"artikel_id" INTEGER NOT NULL,
"anzahl" INTEGER NOT NULL,
CONSTRAINT "Kauf_Artikel_kauf_id_fkey" FOREIGN KEY ("kauf_id") REFERENCES "Kauf" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT "Kauf_Artikel_artikel_id_fkey" FOREIGN KEY ("artikel_id") REFERENCES "Artikel" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
);
-- CreateTable
CREATE TABLE "Artikel" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL,
"preis" REAL
);
-- CreateTable
CREATE TABLE "Kauf" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"timestamp" INTEGER NOT NULL,
"preis_ges" REAL
);
-- CreateIndex
CREATE UNIQUE INDEX "Artikel_name_key" ON "Artikel"("name");
@@ -0,0 +1,47 @@
/*
Warnings:
- You are about to drop the `Kauf_Artikel` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropTable
PRAGMA foreign_keys=off;
DROP TABLE "Kauf_Artikel";
PRAGMA foreign_keys=on;
-- CreateTable
CREATE TABLE "KaufArtikel" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"kauf_id" INTEGER NOT NULL,
"artikel_id" INTEGER NOT NULL,
"anzahl" INTEGER NOT NULL,
CONSTRAINT "KaufArtikel_kauf_id_fkey" FOREIGN KEY ("kauf_id") REFERENCES "Kauf" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT "KaufArtikel_artikel_id_fkey" FOREIGN KEY ("artikel_id") REFERENCES "Artikel" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
);
-- CreateTable
CREATE TABLE "Kategorie" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL,
"timestamp" INTEGER NOT NULL,
"preis_ges" REAL
);
-- RedefineTables
PRAGMA foreign_keys=OFF;
CREATE TABLE "new_Artikel" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL,
"preis" REAL,
"kategorie_id" INTEGER,
CONSTRAINT "Artikel_kategorie_id_fkey" FOREIGN KEY ("kategorie_id") REFERENCES "Kategorie" ("id") ON DELETE SET NULL ON UPDATE CASCADE
);
INSERT INTO "new_Artikel" ("id", "name", "preis") SELECT "id", "name", "preis" FROM "Artikel";
DROP TABLE "Artikel";
ALTER TABLE "new_Artikel" RENAME TO "Artikel";
CREATE UNIQUE INDEX "Artikel_name_key" ON "Artikel"("name");
PRAGMA foreign_key_check;
PRAGMA foreign_keys=ON;
-- CreateIndex
CREATE UNIQUE INDEX "Kategorie_name_key" ON "Kategorie"("name");
+3
View File
@@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "sqlite"
+30 -6
View File
@@ -9,10 +9,34 @@ generator client {
}
// Define your own datamodels here and run `yarn redwood prisma migrate dev`
// to create migrations for them and apply to your dev DB.
// TODO: Please remove the following example:
model UserExample {
id Int @id @default(autoincrement())
email String @unique
name String?
model KaufArtikel {
id Int @id @default(autoincrement())
kauf Kauf @relation(fields: [kauf_id], references: [id])
kauf_id Int
artikel Artikel @relation(fields: [artikel_id], references: [id])
artikel_id Int
anzahl Int
}
model Artikel {
id Int @id @default(autoincrement())
name String @unique
preis Float?
kategorie Kategorie? @relation(fields: [kategorie_id], references: [id])
kategorie_id Int?
kaeufe KaufArtikel[]
}
model Kategorie {
id Int @id @default(autoincrement())
name String @unique
artikel Artikel[]
}
model Kauf {
id Int @id @default(autoincrement())
timestamp DateTime @default(now())
preis_ges Float?
artikel KaufArtikel[]
}
+33
View File
@@ -0,0 +1,33 @@
export const schema = gql`
type Artikel {
id: Int!
name: String!
preis: Float
kategorie: Kategorie
kategorie_id: Int
kaeufe: [KaufArtikel]!
}
type Query {
artikels: [Artikel!]! @requireAuth
artikel(id: Int!): Artikel @requireAuth
}
input CreateArtikelInput {
name: String!
preis: Float
kategorie_id: Int
}
input UpdateArtikelInput {
name: String
preis: Float
kategorie_id: Int
}
type Mutation {
createArtikel(input: CreateArtikelInput!): Artikel! @requireAuth
updateArtikel(id: Int!, input: UpdateArtikelInput!): Artikel! @requireAuth
deleteArtikel(id: Int!): Artikel! @requireAuth
}
`
+27
View File
@@ -0,0 +1,27 @@
export const schema = gql`
type Kategorie {
id: Int!
name: String!
artikel: [Artikel]!
}
type Query {
kategories: [Kategorie!]! @requireAuth
kategorie(id: Int!): Kategorie @requireAuth
}
input CreateKategorieInput {
name: String!
}
input UpdateKategorieInput {
name: String
}
type Mutation {
createKategorie(input: CreateKategorieInput!): Kategorie! @requireAuth
updateKategorie(id: Int!, input: UpdateKategorieInput!): Kategorie!
@requireAuth
deleteKategorie(id: Int!): Kategorie! @requireAuth
}
`
+34
View File
@@ -0,0 +1,34 @@
export const schema = gql`
type KaufArtikel {
id: Int!
kauf: Kauf!
kauf_id: Int!
artikel: Artikel!
artikel_id: Int!
anzahl: Int!
}
type Query {
kaufArtikels: [KaufArtikel!]! @requireAuth
kaufArtikel(id: Int!): KaufArtikel @requireAuth
}
input CreateKaufArtikelInput {
kauf_id: Int!
artikel_id: Int!
anzahl: Int!
}
input UpdateKaufArtikelInput {
kauf_id: Int
artikel_id: Int
anzahl: Int
}
type Mutation {
createKaufArtikel(input: CreateKaufArtikelInput!): KaufArtikel! @requireAuth
updateKaufArtikel(id: Int!, input: UpdateKaufArtikelInput!): KaufArtikel!
@requireAuth
deleteKaufArtikel(id: Int!): KaufArtikel! @requireAuth
}
`
+29
View File
@@ -0,0 +1,29 @@
export const schema = gql`
type Kauf {
id: Int!
timestamp: DateTime!
preis_ges: Float
artikel: [KaufArtikel]!
}
type Query {
kaufs: [Kauf!]! @requireAuth
kauf(id: Int!): Kauf @requireAuth
}
input CreateKaufInput {
timestamp: DateTime!
preis_ges: Float
}
input UpdateKaufInput {
timestamp: DateTime
preis_ges: Float
}
type Mutation {
createKauf(input: CreateKaufInput!): Kauf! @requireAuth
updateKauf(id: Int!, input: UpdateKaufInput!): Kauf! @requireAuth
deleteKauf(id: Int!): Kauf! @requireAuth
}
`
+39
View File
@@ -0,0 +1,39 @@
import { db } from 'src/lib/db'
export const artikels = () => {
return db.artikel.findMany()
}
export const artikel = ({ id }) => {
return db.artikel.findUnique({
where: { id },
})
}
export const createArtikel = ({ input }) => {
return db.artikel.create({
data: input,
})
}
export const updateArtikel = ({ id, input }) => {
return db.artikel.update({
data: input,
where: { id },
})
}
export const deleteArtikel = ({ id }) => {
return db.artikel.delete({
where: { id },
})
}
export const Artikel = {
kategorie: (_obj, { root }) => {
return db.artikel.findUnique({ where: { id: root?.id } }).kategorie()
},
kaeufe: (_obj, { root }) => {
return db.artikel.findUnique({ where: { id: root?.id } }).kaeufe()
},
}
@@ -0,0 +1,6 @@
export const standard = defineScenario({
artikel: {
one: { data: { name: 'String735050' } },
two: { data: { name: 'String6988247' } },
},
})
@@ -0,0 +1,54 @@
import {
artikels,
artikel,
createArtikel,
updateArtikel,
deleteArtikel,
} from './artikels'
// Generated boilerplate tests do not account for all circumstances
// and can fail without adjustments, e.g. Float.
// Please refer to the RedwoodJS Testing Docs:
// https://redwoodjs.com/docs/testing#testing-services
// https://redwoodjs.com/docs/testing#jest-expect-type-considerations
describe('artikels', () => {
scenario('returns all artikels', async (scenario) => {
const result = await artikels()
expect(result.length).toEqual(Object.keys(scenario.artikel).length)
})
scenario('returns a single artikel', async (scenario) => {
const result = await artikel({ id: scenario.artikel.one.id })
expect(result).toEqual(scenario.artikel.one)
})
scenario('creates a artikel', async () => {
const result = await createArtikel({
input: { name: 'String6975650' },
})
expect(result.name).toEqual('String6975650')
})
scenario('updates a artikel', async (scenario) => {
const original = await artikel({ id: scenario.artikel.one.id })
const result = await updateArtikel({
id: original.id,
input: { name: 'String5200162' },
})
expect(result.name).toEqual('String5200162')
})
scenario('deletes a artikel', async (scenario) => {
const original = await deleteArtikel({
id: scenario.artikel.one.id,
})
const result = await artikel({ id: original.id })
expect(result).toEqual(null)
})
})
+36
View File
@@ -0,0 +1,36 @@
import { db } from 'src/lib/db'
export const kategories = () => {
return db.kategorie.findMany()
}
export const kategorie = ({ id }) => {
return db.kategorie.findUnique({
where: { id },
})
}
export const createKategorie = ({ input }) => {
return db.kategorie.create({
data: input,
})
}
export const updateKategorie = ({ id, input }) => {
return db.kategorie.update({
data: input,
where: { id },
})
}
export const deleteKategorie = ({ id }) => {
return db.kategorie.delete({
where: { id },
})
}
export const Kategorie = {
artikel: (_obj, { root }) => {
return db.kategorie.findUnique({ where: { id: root?.id } }).artikel()
},
}
@@ -0,0 +1,6 @@
export const standard = defineScenario({
kategorie: {
one: { data: { name: 'String8168544' } },
two: { data: { name: 'String7171026' } },
},
})
@@ -0,0 +1,56 @@
import {
kategories,
kategorie,
createKategorie,
updateKategorie,
deleteKategorie,
} from './kategories'
// Generated boilerplate tests do not account for all circumstances
// and can fail without adjustments, e.g. Float.
// Please refer to the RedwoodJS Testing Docs:
// https://redwoodjs.com/docs/testing#testing-services
// https://redwoodjs.com/docs/testing#jest-expect-type-considerations
describe('kategories', () => {
scenario('returns all kategories', async (scenario) => {
const result = await kategories()
expect(result.length).toEqual(Object.keys(scenario.kategorie).length)
})
scenario('returns a single kategorie', async (scenario) => {
const result = await kategorie({ id: scenario.kategorie.one.id })
expect(result).toEqual(scenario.kategorie.one)
})
scenario('creates a kategorie', async () => {
const result = await createKategorie({
input: { name: 'String2189335' },
})
expect(result.name).toEqual('String2189335')
})
scenario('updates a kategorie', async (scenario) => {
const original = await kategorie({
id: scenario.kategorie.one.id,
})
const result = await updateKategorie({
id: original.id,
input: { name: 'String81840662' },
})
expect(result.name).toEqual('String81840662')
})
scenario('deletes a kategorie', async (scenario) => {
const original = await deleteKategorie({
id: scenario.kategorie.one.id,
})
const result = await kategorie({ id: original.id })
expect(result).toEqual(null)
})
})
@@ -0,0 +1,39 @@
import { db } from 'src/lib/db'
export const kaufArtikels = () => {
return db.kaufArtikel.findMany()
}
export const kaufArtikel = ({ id }) => {
return db.kaufArtikel.findUnique({
where: { id },
})
}
export const createKaufArtikel = ({ input }) => {
return db.kaufArtikel.create({
data: input,
})
}
export const updateKaufArtikel = ({ id, input }) => {
return db.kaufArtikel.update({
data: input,
where: { id },
})
}
export const deleteKaufArtikel = ({ id }) => {
return db.kaufArtikel.delete({
where: { id },
})
}
export const KaufArtikel = {
kauf: (_obj, { root }) => {
return db.kaufArtikel.findUnique({ where: { id: root?.id } }).kauf()
},
artikel: (_obj, { root }) => {
return db.kaufArtikel.findUnique({ where: { id: root?.id } }).artikel()
},
}
@@ -0,0 +1,18 @@
export const standard = defineScenario({
kaufArtikel: {
one: {
data: {
anzahl: 2209529,
kauf: { create: { timestamp: 597422 } },
artikel: { create: { name: 'String5421835' } },
},
},
two: {
data: {
anzahl: 9755057,
kauf: { create: { timestamp: 9620697 } },
artikel: { create: { name: 'String8993250' } },
},
},
},
})
@@ -0,0 +1,62 @@
import {
kaufArtikels,
kaufArtikel,
createKaufArtikel,
updateKaufArtikel,
deleteKaufArtikel,
} from './kaufArtikels'
// Generated boilerplate tests do not account for all circumstances
// and can fail without adjustments, e.g. Float.
// Please refer to the RedwoodJS Testing Docs:
// https://redwoodjs.com/docs/testing#testing-services
// https://redwoodjs.com/docs/testing#jest-expect-type-considerations
describe('kaufArtikels', () => {
scenario('returns all kaufArtikels', async (scenario) => {
const result = await kaufArtikels()
expect(result.length).toEqual(Object.keys(scenario.kaufArtikel).length)
})
scenario('returns a single kaufArtikel', async (scenario) => {
const result = await kaufArtikel({ id: scenario.kaufArtikel.one.id })
expect(result).toEqual(scenario.kaufArtikel.one)
})
scenario('creates a kaufArtikel', async (scenario) => {
const result = await createKaufArtikel({
input: {
kauf_id: scenario.kaufArtikel.two.kauf_id,
artikel_id: scenario.kaufArtikel.two.artikel_id,
anzahl: 8696596,
},
})
expect(result.kauf_id).toEqual(scenario.kaufArtikel.two.kauf_id)
expect(result.artikel_id).toEqual(scenario.kaufArtikel.two.artikel_id)
expect(result.anzahl).toEqual(8696596)
})
scenario('updates a kaufArtikel', async (scenario) => {
const original = await kaufArtikel({
id: scenario.kaufArtikel.one.id,
})
const result = await updateKaufArtikel({
id: original.id,
input: { anzahl: 785481 },
})
expect(result.anzahl).toEqual(785481)
})
scenario('deletes a kaufArtikel', async (scenario) => {
const original = await deleteKaufArtikel({
id: scenario.kaufArtikel.one.id,
})
const result = await kaufArtikel({ id: original.id })
expect(result).toEqual(null)
})
})
+36
View File
@@ -0,0 +1,36 @@
import { db } from 'src/lib/db'
export const kaufs = () => {
return db.kauf.findMany()
}
export const kauf = ({ id }) => {
return db.kauf.findUnique({
where: { id },
})
}
export const createKauf = ({ input }) => {
return db.kauf.create({
data: input,
})
}
export const updateKauf = ({ id, input }) => {
return db.kauf.update({
data: input,
where: { id },
})
}
export const deleteKauf = ({ id }) => {
return db.kauf.delete({
where: { id },
})
}
export const Kauf = {
artikel: (_obj, { root }) => {
return db.kauf.findUnique({ where: { id: root?.id } }).artikel()
},
}
@@ -0,0 +1,3 @@
export const standard = defineScenario({
kauf: { one: { data: {} }, two: { data: {} } },
})
+28
View File
@@ -0,0 +1,28 @@
import { kaufs, kauf, deleteKauf } from './kaufs'
// Generated boilerplate tests do not account for all circumstances
// and can fail without adjustments, e.g. Float.
// Please refer to the RedwoodJS Testing Docs:
// https://redwoodjs.com/docs/testing#testing-services
// https://redwoodjs.com/docs/testing#jest-expect-type-considerations
describe('kaufs', () => {
scenario('returns all kaufs', async (scenario) => {
const result = await kaufs()
expect(result.length).toEqual(Object.keys(scenario.kauf).length)
})
scenario('returns a single kauf', async (scenario) => {
const result = await kauf({ id: scenario.kauf.one.id })
expect(result).toEqual(scenario.kauf.one)
})
scenario('deletes a kauf', async (scenario) => {
const original = await deleteKauf({ id: scenario.kauf.one.id })
const result = await kauf({ id: original.id })
expect(result).toEqual(null)
})
})