anchovycation / metronom

Easy to use Redis ORM based on node-redis with TypeScript support
https://anchovycation.github.io/metronom/
GNU General Public License v3.0
7 stars 3 forks source link

Core data types added #58

Open saracalihan opened 1 year ago

saracalihan commented 1 year ago

Motivation

When we set out, we had planned to save objects with Redis only with hash type, but now I think that integrating other types of Redis into our system will make our project even stronger.

Currently, Model type using embeded hash function and flow. All Model functions and ModelInstance should be free from hashing and models should be written to return ModelInstance for each type.

All types has internal _write, _read functions and use it on that's business logic's. All models has to have common metronom datas like redisClient so i thing all models should extends on IModel interface and this interface include that datas.

// example usage
import { Hash, String, List } from 'metronom';

let user = Hash(schema, keyPrefix, modelOptions);
let token = String(key, 'value');
let ids = List(key);

user.isAdmin = true; // hSet
token.set('new-value'); // set
ids.push(102); // lPush
ids.unshift(205); // rPush
// ...

await user.save();
await token.save()
await ids.save();

await token.destroy()

Implementation

more detail for Redis types

saracalihan commented 1 year ago

@beyzaerkan This is biggest technical and philosophical major change of metronom. Although we leave an object-based structure and support all types, our forest structure will have to change a little more.

For example, since it does not make sense to use functions such as Model.findAll in some types, we will have to remove them and add functions related to types, which I think will separate us a little from our initial output.

We can still stick to our core philosophy by adding static functions to models.

I'm curious about your thoughts as this is a big decision.