All checks were successful
backend-action / build-image (push) Successful in 26s
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { db } from "./src/db";
|
|
import { group, opinion, zone, province } from "./src/schema";
|
|
import { Groups, Opinions, Provinces, Districts } from "./initialData";
|
|
import { createBucket, createClient } from "./src/minio";
|
|
import { Config } from "./src/config";
|
|
|
|
async function main() {
|
|
try {
|
|
await setupBucket();
|
|
} catch {
|
|
console.error("Setting up bucket failed");
|
|
}
|
|
const isInitialized = await db.query.group
|
|
.findMany()
|
|
.then((groups) => groups.length > 0);
|
|
if (isInitialized) {
|
|
console.log("Already initialized");
|
|
return;
|
|
}
|
|
let groupValues = Groups.map((group) => ({ name: group }));
|
|
await db.insert(group).values(groupValues);
|
|
let opinionValues = Opinions.map((opinion) => ({
|
|
name: opinion.name,
|
|
type: opinion.choicemode,
|
|
}));
|
|
await db.insert(opinion).values(opinionValues);
|
|
let provinceValues = Provinces.map((province) => ({
|
|
id: province.code,
|
|
name: province.name_th,
|
|
}));
|
|
await db.insert(province).values(provinceValues);
|
|
const zoneValues = Districts.map((district) => ({
|
|
id: district.code,
|
|
name: district.name_th,
|
|
province: district.province_code,
|
|
}));
|
|
await db.insert(zone).values(zoneValues);
|
|
console.log("Done");
|
|
}
|
|
|
|
async function setupBucket() {
|
|
const BucketPolicy = {
|
|
Version: "2012-10-17",
|
|
Statement: [
|
|
{
|
|
Action: ["s3:GetObject"],
|
|
Effect: "Allow",
|
|
Principal: "*",
|
|
Resource: [`arn:aws:s3:::${Config.bucketName}/*`],
|
|
Sid: "AllowAnonymousAccess",
|
|
},
|
|
],
|
|
};
|
|
let mc = createClient();
|
|
await createBucket(mc);
|
|
await mc.setBucketPolicy(Config.bucketName, JSON.stringify(BucketPolicy));
|
|
}
|
|
|
|
main();
|