Skip to content

Latest commit

 

History

History
232 lines (203 loc) · 21.9 KB

features.md

File metadata and controls

232 lines (203 loc) · 21.9 KB

Ent framework

Functionality Go Typescript MVP
Schema in code ✔️ ✔️ ✔️
privacy ✔️ ✔️ ✔️
EntQuery ✔️ ✔️
Mutations/actions ✔️ ✔️ ✔️
per field privacy ✔️
data loaders (n+1 issue) ✔️ ✔️
support different caches ✔️
per request in memory cache (raw data) ✔️ ✔️
per request in memory cache (viewer|ents) ✔️
auth ✔️ ✔️
patterns | mixins ✔️ ✔️
Correct imports in generated file ✔️ ✔️ ✔️
custom functions/accessors in ents ✔️ ✔️ ✔️
custom top level functions ✔️ ✔️ ✔️
sharding
file uploads ✔️ ✔️
encryption at rest
Fb style fbobject and everything that comes with that
e.g. FriendFeed style indices etc and go from there
can viewer do
load multiple ids easily ✔️ ✔️ ✔️
concurrency ✔️ ✔️ ✔️
load ents/ids from unique/indices ✔️ ✔️ ✔️
Init/setup ✔️ ✔️
CLI ✔️ ✔️ ✔️
database migrations ✔️ ✔️ ✔️
ent configuration (code ideal/yaml second) ✔️ ✔️
load assoc config in memory once ✔️
deleted_at and similar ways to change behavior ✔️
dockerize everything to run in production/download easily ✔️ ✔️
Different primary id types ✔️
privacy at creation/edit/etc ✔️ ✔️
sql builder/custom sql queries ✔️ ✔️ ✔️
Colocation (part of sharding)
Payments
integration with microservices/different data sources
different databases (other than postgres)
GraphQL ✔️ ✔️ ✔️
easy testing ✔️
import from db strong follow-on
import from other schemas? strong follow-on
feature flags (+ built into permissions)

Schema

Functionality Go Typescript MVP
Fields ✔️ ✔️ ✔️
Custom Table name ✔️ ✔️ ✔️
Default Table name ✔️ ✔️
Edges ✔️ ✔️ ✔️
actions ✔️ ✔️ ✔️
composite indices ✔️ ✔️
composite unique fields ✔️ ✔️
composite primary keys ✔️ ✔️
patterns ✔️ ✔️
hide from graphql ✔️ ✔️

Fields (schema)

Functionality Go Typescript MVP
Server default (stored in db) ✔️ ✔️ ✔️
override db name ✔️ ✔️ ✔️
override graphql name ✔️ ✔️ ✔️
unique field ✔️ ✔️ ✔️
hide from graphql ✔️ ✔️ ✔️
private ✔️ ✔️ ✔️
index ✔️ ✔️ ✔️
foreign key ✔️ ✔️ ✔️
field edge ✔️ ✔️ ✔️
primary key ✔️ ✔️
disableUserEditable ✔️ ✔️
default value on create ✔️ ✔️
default value on edit ✔️ ✔️

Fields (functionality)

Functionality Go Typescript MVP
validate ✔️ ✔️ ✔️
format ✔️ ✔️ ✔️
allow blank?
allow nil?

DataTypes

Functionality Go Typescript MVP
Uuid ✔️ ✔️ ✔️
String ✔️ ✔️ ✔️
int ✔️ ✔️ ✔️
float ✔️ ✔️ ✔️
bool ✔️ ✔️ ✔️
time ✔️ ✔️ ✔️
ints ✔️ ✔️ ✔️
strings ✔️ ✔️ ✔️
floats ✔️ ✔️ ✔️
json (but not postgres type) ✔️ ✔️
postgres json
string enums ✔️ ✔️
int enums
custom type (part of json) ✔️ ✔️
email ✔️ ✔️ ✔️
password ✔️ ✔️ ✔️
phone number ✔️ ✔️ ✔️
Url ✔️ ✔️

Edges

Functionality Go Typescript MVP
foreign keys ✔️ ✔️ ✔️
assoc edges ✔️ ✔️ ✔️
assoc group ✔️ ✔️ ✔️
three way edge with id in data field ✔️
Easy customizations for the popular edges in different frameworks etc:
e.g. one-way, many-to-many that does the right thing
✔️
polymorphic edges ✔️ ✔️
"join tables" ✔️

assoc edges

Functionality Go Typescript MVP
unique ✔️ ✔️ ✔️
symmetric ✔️ ✔️ ✔️
Inverse ✔️ ✔️ ✔️
Counts ✔️ ✔️
polymorphic edges ✔️

assoc group

Functionality Go Typescript MVP
status ✔️

GraphQL

Functionality Go Typescript MVP
base case (everything) ✔️ ✔️ ✔️
persisted queries ✔️
only gql errors returned to the user ✔️
Subscriptions
easy testing ✔️ ✔️
entquery ✔️ ✔️

EntQuery

Functionality Go Typescript MVP
ids ✔️ ✔️
Edges ✔️ ✔️
fetch one id ✔️
Intersection
per edge privacy ✔️
union
custom logic
counts (raw | privacy backed) ✔️ ✔️
ordering (sort by time/ name etc easily) ✔️
filters e.g. pagination ✔️ ✔️
named custom queries ✔️ ✔️
toggle btw crazy joins and loading objects one by one

database migrations

Functionality Go Typescript MVP
default ✔️
Up ✔️
down ✔️
custom fields ✔️

Actions

Functionality Go Typescript MVP
custom actions (schema) ✔️ ✔️ ✔️
Easy create/edit/delete generated/editable ✔️ ✔️ ✔️
observers ✔️ ✔️ ✔️
validators ✔️ ✔️ ✔️
triggers ✔️ ✔️ ✔️
permissions ✔️ ✔️ ✔️
inverse edge (write field edge) ✔️ ✔️ ✔️
nullable fields ✔️ ✔️ ✔️
custom mutation fields ✔️ ✔️
custom data/time for edges ✔️ ✔️ ✔️
placeholders and resolvers ✔️ ✔️ ✔️
integrate fields ✔️ ✔️ ✔️
built in transactions ✔️ ✔️ ✔️
default observers (send text | email | slack) strong nice to have
custom actions called from custom functions ✔️

cache support

Functionality Go Typescript MVP
Redis ✔️
Memory ✔️
memcache

Auth

Functionality Go Typescript MVP
passwordless
email/password ✔️ ✔️ ✔️
phone number/pin ✔️ ✔️
auth0 ✔️ ✔️
passport ✔️ ✔️
facebook
google
github
twitter
sessions
stateless
mfa
2fa
apple
Face ID

ids

Functionality Go Typescript MVP
Uuid ✔️ ✔️ ✔️
int64 (auto increment) ✔️
Int32 (auto increment)
custom id (not auto increment)