251 lines
5.7 KiB
JavaScript
251 lines
5.7 KiB
JavaScript
/* eslint-disable no-console */
|
|
const { PrismaClient } = require('@prisma/client')
|
|
const dotenv = require('dotenv')
|
|
|
|
dotenv.config()
|
|
const db = new PrismaClient()
|
|
|
|
async function main() {
|
|
// Seed data is database data that needs to exist for your app to run.
|
|
// Ideally this file should be idempotent: running it multiple times
|
|
// will result in the same database state (usually by checking for the
|
|
// existence of a record before trying to create it). For example:
|
|
//
|
|
// const existing = await db.user.findMany({ where: { email: 'admin@email.com' }})
|
|
// if (!existing.length) {
|
|
// await db.user.create({ data: { name: 'Admin', email: 'admin@email.com' }})
|
|
// }
|
|
const users = [
|
|
{
|
|
id: "a2b21ce1-ae57-43a2-b6a3-b6e542fd9e60",
|
|
userName: "local-user-1",
|
|
name: "local 1",
|
|
email: "localUser1@kurthutten.com"
|
|
},
|
|
{
|
|
id: "682ba807-d10e-4caf-bf28-74054e46c9ec",
|
|
userName: "local-user-2",
|
|
name: "local 2",
|
|
email: "localUser2@kurthutten.com"
|
|
},
|
|
{
|
|
id: "5cea3906-1e8e-4673-8f0d-89e6a963c096",
|
|
userName: "local-admin-2",
|
|
name: "local admin",
|
|
email: "localAdmin@kurthutten.com"
|
|
},
|
|
]
|
|
|
|
let existing
|
|
existing = await db.user.findMany({ where: { id: users[0].id }})
|
|
if(!existing.length) {
|
|
await db.user.create({
|
|
data: users[0],
|
|
})
|
|
}
|
|
existing = await db.user.findMany({ where: { id: users[1].id }})
|
|
if(!existing.length) {
|
|
await db.user.create({
|
|
data: users[1],
|
|
})
|
|
}
|
|
|
|
const projects = [
|
|
{
|
|
title: 'demo-project1',
|
|
description: '# can be markdown',
|
|
mainImage: 'CadHub/kjdlgjnu0xmwksia7xox',
|
|
code: getOpenScadHingeCode(),
|
|
cadPackage: 'openscad',
|
|
user: {
|
|
connect: {
|
|
id: users[0].id,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
title: 'demo-project2',
|
|
description: '## [hey](www.google.com)',
|
|
user: {
|
|
connect: {
|
|
id: users[1].id,
|
|
},
|
|
},
|
|
},
|
|
]
|
|
|
|
existing = await db.project.findMany({where: { title: projects[0].title}})
|
|
if(!existing.length) {
|
|
await db.project.create({
|
|
data: projects[0],
|
|
})
|
|
}
|
|
existing = await db.project.findMany({where: { title: projects[1].title}})
|
|
if(!existing.length) {
|
|
const result = await db.project.create({
|
|
data: projects[1],
|
|
})
|
|
|
|
await db.project.create({
|
|
data: {
|
|
...projects[1],
|
|
title: `${projects[1].title} fork`,
|
|
forkedFrom: {
|
|
connect: {
|
|
id: result.id,
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
|
|
|
|
const aProject = await db.project.findUnique({where: {
|
|
title_userId: {
|
|
title: projects[0].title,
|
|
userId: users[0].id,
|
|
}
|
|
}})
|
|
await db.comment.create({
|
|
data: {
|
|
text: "nice project, I like it",
|
|
userId: users[0].id,
|
|
projectId: aProject.id,
|
|
// user: {connect: { id: users[0].id}},
|
|
// project: {connect: { id: aProject.id}},
|
|
}
|
|
})
|
|
await db.projectReaction.create({
|
|
data: {
|
|
emote: "❤️",
|
|
userId: users[0].id,
|
|
projectId: aProject.id,
|
|
// user: {connect: { id: users[0].id}},
|
|
// project: {connect: { id: aProject.id}},
|
|
}
|
|
})
|
|
|
|
console.info('No data to seed. See api/prisma/seeds.js for info.')
|
|
}
|
|
|
|
main()
|
|
.catch((e) => console.error(e))
|
|
.finally(async () => {
|
|
await db.$disconnect()
|
|
})
|
|
|
|
|
|
|
|
function getOpenScadHingeCode () {
|
|
return `
|
|
baseWidth=15; // [0.1:0.1:50]
|
|
|
|
hingeLength=30; // [0.1:0.1:50]
|
|
|
|
// Hole mant mounting holes per half.
|
|
mountingHoleCount=3; // [1:20]
|
|
|
|
baseThickness=3; // [0.1:0.1:20]
|
|
|
|
pivotRadius=5; // [0.1:0.1:20]
|
|
|
|
// Pin that the hinge pivots on.
|
|
pinRadius=2; // [0.1:0.1:20]
|
|
|
|
mountingHoleRadius=1.5; // [0.1:0.1:10]
|
|
|
|
// How far away the hole is from the egde.
|
|
mountingHoleEdgeOffset=4; // [0:50]
|
|
|
|
// Depending on the accuracy of your printer this may need to be increased in order for print in place to work.
|
|
clearance=0.2; // [0.05:0.01:1]
|
|
|
|
// Radius difference in the ivot taper to stop the hinge from falling apart. Should be increased with large clearance values.
|
|
pinTaper=0.25; // [0.1:0.1:2]
|
|
|
|
// calculated values
|
|
hingeHalfExtrudeLength=hingeLength/2-clearance/2;
|
|
mountingHoleMoveIncrement=(hingeLength-2*mountingHoleEdgeOffset)/
|
|
(mountingHoleCount-1);
|
|
|
|
module costomizerEnd() {}
|
|
$fn=30;
|
|
tiny=0.005;
|
|
// modules
|
|
module hingeBaseProfile() {
|
|
translate([pivotRadius,0,0]){
|
|
square([baseWidth,baseThickness]);
|
|
}
|
|
}
|
|
|
|
module hingeBodyHalf() {
|
|
difference() {
|
|
union() {
|
|
linear_extrude(hingeHalfExtrudeLength){
|
|
offset(1)offset(-2)offset(1){
|
|
translate([0,pivotRadius,0]){
|
|
circle(pivotRadius);
|
|
}
|
|
square([pivotRadius,pivotRadius]);
|
|
hingeBaseProfile();
|
|
}
|
|
}
|
|
linear_extrude(hingeLength){
|
|
offset(1)offset(-1)hingeBaseProfile();
|
|
}
|
|
}
|
|
plateHoles();
|
|
}
|
|
}
|
|
|
|
module pin(rotateY, radiusOffset) {
|
|
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
|
rotate([0,rotateY,0]) {
|
|
cylinder(
|
|
h=hingeLength/2+clearance/2,
|
|
r1=pinRadius+radiusOffset,
|
|
r2=pinRadius+pinTaper+radiusOffset
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
module hingeHalfFemale() {
|
|
difference() {
|
|
hingeBodyHalf();
|
|
pin(rotateY=180, radiusOffset=clearance);
|
|
}
|
|
}
|
|
|
|
module hingeHalfMale() {
|
|
translate([0,0,hingeLength]) {
|
|
rotate([0,180,0]) {
|
|
hingeBodyHalf();
|
|
pin(rotateY=0, radiusOffset=0);
|
|
}
|
|
}
|
|
}
|
|
|
|
module plateHoles() {
|
|
for(i=[0:mountingHoleCount-1]){
|
|
translate([
|
|
baseWidth/2+pivotRadius,
|
|
-baseThickness,
|
|
i*mountingHoleMoveIncrement+mountingHoleEdgeOffset
|
|
]){
|
|
rotate([-90,0,0]){
|
|
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// using high-level modules
|
|
translate([0,0,-15]) {
|
|
hingeHalfFemale();
|
|
hingeHalfMale();
|
|
}
|
|
`
|
|
}
|