This commit is contained in:
Andreas 2023-06-11 09:30:11 +02:00
parent da817cb96a
commit b1974ce50e
10 changed files with 1181 additions and 9 deletions

1
.gitignore vendored
View File

@ -33,3 +33,4 @@ yarn-error.log*
# typescript # typescript
*.tsbuildinfo *.tsbuildinfo
next-env.d.ts next-env.d.ts
db.sqlite

27
docker-compose.yml Normal file
View File

@ -0,0 +1,27 @@
version: "3.0"
services:
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydatabase
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- dbdata:/var/lib/mysql
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: pma
links:
- db
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_ARBITRARY: 1
restart: always
ports:
- 8081:80
volumes:
dbdata:

1016
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -24,6 +24,9 @@
"react": "18.2.0", "react": "18.2.0",
"react-bootstrap": "^2.7.4", "react-bootstrap": "^2.7.4",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"sequelize": "^6.32.0",
"sqlite": "^4.2.1",
"sqlite3": "^5.1.6",
"tailwindcss": "3.3.2", "tailwindcss": "3.3.2",
"typescript": "5.0.4" "typescript": "5.0.4"
} }

View File

@ -10,7 +10,7 @@ export interface IPost extends RowDataPacket {
export async function getPost(id:Number): Promise<IPost[]> { export async function getPost(id:Number): Promise<IPost[]> {
// let [rows]:Array<IPost> = await conn.execute("SELECT * FROM `post`", []); // let [rows]:Array<IPost> = await conn.execute("SELECT * FROM `post`", []);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let res = getConnection().then((conn)=>{conn.query<IPost[]>(`SELECT * FROM \`post\` WHERE \`id\` = ${id}`, (err:QueryError, res) => { let res = getConnection().then((conn)=>{conn.query<IPost[]>(`SELECT * FROM post WHERE id = ${id}`, (err:QueryError, res) => {
if (err) reject(err) if (err) reject(err)
else resolve(res) else resolve(res)
}); });

View File

@ -3,9 +3,9 @@ import mysql2, { Connection } from "mysql2";
const connectionInfo:mysql.ConnectionOptions = { const connectionInfo:mysql.ConnectionOptions = {
host: '127.0.0.1', host: '127.0.0.1',
port: 40000, port: 3306,
user: 'root', user: 'user',
password: 'rootpassword', password: 'password',
database: 'portfolio', database: 'portfolio',
}; };

View File

@ -1,13 +1,42 @@
import Gens from "@/gens"; import Gens from "@/gens";
import { Sequelize, DataTypes } from 'sequelize'; import { Sequelize, DataTypes, Association } from 'sequelize';
const sequelize = new Sequelize('sqlite::memory:'); const sequelize = new Sequelize({
const MPost = sequelize.define('Post', { dialect: 'sqlite',
id: DataTypes.INTEGER, storage: 'db.sqlite'
});
export const MPost = sequelize.define('Post', {
id: {
type: DataTypes.INTEGER,
primaryKey: true
},
title: DataTypes.STRING, title: DataTypes.STRING,
content: DataTypes.STRING, content: DataTypes.STRING,
date: DataTypes.DATE, // date: DataTypes.DATE,
}); });
export const MAuth = sequelize.define('Auth', {
id: {
type: DataTypes.INTEGER,
primaryKey: true
},
token: DataTypes.STRING,
user_id: {
type: DataTypes.INTEGER,
}
// date: DataTypes.DATE,
});
export const MUser = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true
},
username: DataTypes.STRING,
password: DataTypes.STRING,
// date: DataTypes.DATE,
});
MAuth.hasOne(MUser)
export type Post = { export type Post = {
id: Number, id: Number,

View File

@ -0,0 +1,52 @@
import mysql2, { Connection, RowDataPacket, OkPacket, QueryError } from "mysql2";
import { getConnection } from "@/db";
import { Post, postPlaceholder } from "@/model/Models";
import { getPosts, IPost } from "@/controller/Post";
import { NextApiRequest, NextApiResponse } from "next";
import { MPost, MUser, MAuth } from "@/model/Models"
import { Sequelize } from "sequelize";
import { Elsie_Swash_Caps } from "next/font/google";
export default async function handler(req:NextApiRequest, res:NextApiResponse) {
await MUser.sync();
await MAuth.sync();
switch (req.method) {
case 'POST':
case 'GET':
const users = await MUser.findAll();
// res.status(200).json(posts);
let username = req.body.username;
let password = req.body.password;
console.log(req.body );
if(users.length == 0){
MUser.create({
username: "admin",
password: "changeme"
})
}
users.forEach(user => async {
if(user.username == username && user.password == password){
try{
const authtoken = await MAuth.findOne({where : {user_id: user.id}});
if(authtoken != null){
res.status(200).json({"status":"correct"});
console.log(authtoken);
}
else{
res.status(200).json({"status":"no such auth token"});
}
} catch(e){
console.log(e);
}
}
else{
console.log(user.password);
res.status(200).json({"status":"incorrect"});
}
});
break;
default:
break;
}
}

View File

@ -0,0 +1,33 @@
import mysql2, { Connection, RowDataPacket, OkPacket, QueryError } from "mysql2";
import { getConnection } from "@/db";
import { Post, postPlaceholder } from "@/model/Models";
import { getPosts, IPost } from "@/controller/Post";
import { NextApiRequest, NextApiResponse } from "next";
import { MPost } from "@/model/Models"
import { Sequelize } from "sequelize";
export default async function handler(req:NextApiRequest, res:NextApiResponse) {
await MPost.sync();
switch (req.method) {
case 'GET':
const posts = await MPost.findAll();
res.status(200).json(posts);
break;
case 'POST':
try {
const post = await MPost.create({
title: req.body.title,
content: req.body.content,
createdAt: new Date(),
updatedAt: new Date(),
},{ fields: ['title','content'] });
const posts2 = await MPost.findAll();
res.status(200).json(posts2);
} catch (error) {
console.log(error)
}
break;
default:
break;
}
}

View File

@ -0,0 +1,11 @@
import { NextApiRequest, NextApiResponse } from "next";
import { MPost } from "@/model/Models"
import { JSON, Sequelize } from "sequelize";
export default async function handler(req:NextApiRequest, res:NextApiResponse) {
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: 'db.sqlite'
});
await MPost.sync();
}