sheets-orm
Version:
Mengakses Google Sheets seperti database dengan query mirip ORM
156 lines (123 loc) ⢠3.82 kB
Markdown
š **Google Sheets sebagai ORM (Object-Relational Mapping)** menggunakan **Node.js & TypeScript**.
Memungkinkan Anda **menggunakan Google Sheets sebagai database sederhana** dengan fitur:
ā **CRUD (Create, Read, Update, Delete)**
ā **Validasi data sebelum insert/update**
ā **Query filtering untuk pencarian fleksibel**
ā **Pagination (Limit & Offset) untuk findAll()**
ā **Hooks Before/After Insert & Update**
## š Instalasi
```sh
npm install sheets-orm
# atau dengan yarn
yarn add sheets-orm
```
## š Konfigurasi
Sebelum menggunakan `sheets-orm`, Anda perlu **mengatur Google Sheets API** dan mendapatkan **Service Account JSON**.
1ļøā£ **Buat project di [Google Cloud Console](https://console.cloud.google.com/)**
2ļøā£ **Aktifkan Google Sheets API**
3ļøā£ **Buat Service Account** dan unduh JSON-nya
4ļøā£ **Bagikan akses edit** ke Service Account (gunakan email dari JSON)
5ļøā£ **Simpan JSON kredensial dan atur variabel lingkungan**
```sh
GOOGLE_APPLICATION_CREDENTIALS="path/to/service-account.json"
GOOGLE_SPREADSHEET_ID="your-spreadsheet-id"
```
```ts
import { GoogleSheetsORM } from "sheets-orm";
```
```ts
const SPREADSHEET_ID = process.env.SPREADSHEET_ID!;
const SHEET_NAME = "your-sheet-name";
interface User {
id: string;
name: string;
age: number;
}
const orm = new GoogleSheetsORM<User>(SPREADSHEET_ID, SHEET_NAME);
```
```ts
await orm.insert({ id: "1", name: "Alice", age: 25 });
```
```ts
const users = await orm.findAll();
console.log(users);
```
```ts
const filteredUsers = await orm.findAll({ name: "Alice" });
console.log(filteredUsers);
```
```ts
const users = await orm.findAll({}, { limit: 10, offset: 20 });
console.log(users);
```
```ts
const user = await orm.findOne("id", "1");
console.log(user);
```
```ts
await orm.update("id", "1", { name: "Alice Updated", age: 26 });
```
```ts
await orm.delete("id", "1");
```
Menjalankan fungsi sebelum dan sesudah operasi **insert** & **update**.
```ts
orm.beforeInsert = async (data) => {
console.log("Before Insert:", data);
return data; // Bisa ubah data sebelum insert
};
orm.afterInsert = async (data) => {
console.log("After Insert:", data);
};
orm.beforeUpdate = async (data) => {
console.log("Before Update:", data);
return data;
};
orm.afterUpdate = async (data) => {
console.log("After Update:", data);
};
```
| id | name | age |
|----|-------|-----|
| 1 | Alice | 25 |
| 2 | Bob | 30 |
ORM akan membaca/mengubah format seperti ini **secara otomatis**.
Gunakan ORM dengan **berbagai sheet berbeda** dalam satu spreadsheet.
```ts
const usersORM = new GoogleSheetsORM<User>(SPREADSHEET_ID, "Users");
const ordersORM = new GoogleSheetsORM<Order>(SPREADSHEET_ID, "Orders");
```
Jika Anda ingin menentukan range secara manual:
```ts
await orm.findAll({}, { range: "A1:Z100" });
```
Buat `id` otomatis saat insert:
```ts
orm.beforeInsert = async (data) => {
return { id: Date.now().toString(), ...data };
};
```
ā
**CRUD langsung ke Google Sheets sebagai database**
ā
**Filter dan Pagination mendukung data besar**
ā
**Hooks untuk proses sebelum/sesudah insert & update**
ā
**Mudah digunakan dalam proyek TypeScript & JavaScript**
š **Gunakan `sheets-orm` untuk proyek ringan dengan database berbasis Google Sheets!**