Skip to content

Instantly share code, notes, and snippets.

View keizie's full-sized avatar

Jeong-Hee Kang keizie

  • Asia/Seoul
  • 17:47 (UTC +09:00)
View GitHub Profile
@keizie
keizie / DatabaseService.ts
Created February 13, 2025 12:46
nest.js service from prisma $extends (type 3)
import { Injectable, OnModuleDestroy, OnModuleInit, Type } from '@nestjs/common';
import { PrismaClient, Prisma } from '@prisma/client';
const existsExtension = Prisma.defineExtension({
name: 'exists-extension',
model: {
$allModels: {
async exists<T>(this: T, where: Prisma.Args<T, 'findFirst'>['where']): Promise<boolean> {
const context = Prisma.getExtensionContext(this);
const result = await (context as any).findFirst({ where });
@keizie
keizie / DatabaseService.ts
Created February 12, 2025 12:04
nest.js service from prisma $extends (type 2) variant
constructor() {
super()
const ext = Prisma.defineExtension((client) =>
client.$extends({
name: 'webinarAfterCreate',
query: {
webinar: {
async create({ args, query }) {
console.log('webinarAfterCreate', args)
@keizie
keizie / DatabaseService.ts
Created February 12, 2025 12:03
nest.js service from prisma $extends (type 2)
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'
import { PrismaClient } from '@prisma/client'
import { faker } from '@faker-js/faker'
@Injectable()
export class DatabaseService
extends PrismaClient
implements OnModuleInit, OnModuleDestroy
{
constructor() {
@keizie
keizie / DatabaseService.ts
Created February 12, 2025 12:02
nest.js service from prisma $extends (type 1)
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'
import { PrismaClient } from '@prisma/client'
import { faker } from '@faker-js/faker' // 샘플 문자열 생성 용도
@Injectable()
export class DatabaseService
extends getExtendedClient()
implements OnModuleInit, OnModuleDestroy
{
async onModuleInit() {
@keizie
keizie / linkwarden_unshort.sh
Created December 8, 2024 10:24
Expand short URLs from linkwarden and update Link
# linkwarden > Settings > Access Token
TOKEN=""
HOST_URL=""
COLLECTION_ID=""
# collection where invalid urls go
INVALID_COLLECTION_ID=""
# some notes
# 1. "while read -r" is required to preserve escape from compact output from jq
# 2. NEW_URL can make jq breaking if NEW_URL itself have double-qoutations (which is not escaped)
@keizie
keizie / grab_munpia.sh
Created July 23, 2021 17:54
grab_munpia.sh (euc-kr) 2011-03-26
#!/bin/sh
TARGET_URL="$1"
BASE_URL=$(dirname $TARGET_URL)
NEXT_URL="go first"
until [ -z "$NEXT_URL" ]
do
w3m -I cp949 -O cp949 -cols 72 -dump $TARGET_URL | awk 'BEGIN {sw=""} /\[목록보기\]/ {sw=""} {if (sw) print} /댓글 부분으로/ {sw="ok"}'
NEXT_URL=$(w3m -dump_source $TARGET_URL | grep -m 1 "윗글" | awk -F\' '{print $2}')
@keizie
keizie / umpv.sh
Created February 15, 2020 20:40
bash clone of python umpv from mpv package
#!/bin/bash
FIFO="/tmp/mpvpipe"
TARGET=$1
if [ "x--" = "x$TARGET" ]; then
TARGET=$2
fi
PID=$(fuser $FIFO 2> /dev/null)
@keizie
keizie / navermap-reversegeocode.js
Last active June 8, 2018 13:23
네이버 맵이 너무 웹페이지 출력에 맞춰져서 URL 호출만으로는 사용할 수 없는 바람에 만들어본 샘플
'use strict';
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('적당한URL', { waitUntil: 'networkidle2' });
await page.addScriptTag({
// 대량으로 호출해야 한다면 파일로 저장하고 path 옵션으로 추가하는 방식도 가능해보임
@keizie
keizie / img2txt.js
Created March 27, 2016 12:01
OCR via Google Vision API
var fs = require('fs');
var request = require('request');
var base64 = require('base64-stream');
var JSONStream = require('JSONStream');
var visionArgs = {key: fs.readFileSync('vision.key')};
var visionUrl = 'https://vision.googleapis.com/v1/images:annotate';
var reader = process.stdin.pipe(base64.encode());
var writer = request.post({
@keizie
keizie / generator.php
Created March 26, 2016 15:45
Running multiple generator simultaneously
<?php
$epoch = microtime(true);
function times(int $a) {
global $epoch;
$i = 0;
while (++$i <= $a) {
//sleep(1);
var_dump(microtime(true) - $epoch);