doubleleft / hook-admin

Administration interface for hook.

Home Page:http://hook-platform.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Brainstorm arquitetura

gabriel-laet opened this issue · comments

O que seria um plug-in de admin para o dl-api? Algumas premissas, do que eu acho:

  • Não deve fazer parte do core do dl-api;
  • Não deve fazer parte do dl-api-javascript;
  • Deve ser um módulo 100% estático, com o mínimo de dependências;
  • Pode fazer uso de observers, seeds e routes;
  • Separar em módulos (decoupled)
    • JavaScript API
    • GUI toolkit (baseado em Bootstrap ou similar)
      • Talvez uma mescla angular + angular-ui + bootstrap deixe super simples a implementação

Como funcionamento, o que eu esperaria é:

  • Collection-based: toda a UI e funcionalidades são baseadas em collections (duh)
  • CRUD + geração dos fields e validação baseado nos types definidos
  • Os types e os campos devem ser definidos de maneira declarativa, em JavaScript mesmo (sem JSON ou YAML)
  • Se comportar como o admin do Django: uma Collection só é listada no admin apenas se eu explicitamente fizer admin.register('Categories')

Como API, algo assim:

var admin = new DL.Admin(client);
admin.addCollection("Users", options);

ou

var Users = {
name:String,
email:{type:String, validator:"email"}
}
var admin = new DL.Admin(client);
admin.addCollection(Users);

A GUI deveria ser montada baseada nessa API, que teria métodos tipo listCollections, Collection.getFields(), collection.validate() e coisas do tipo.

@doubleleft/devs + @barrabinfc
braindump aqui de idéias depois 👍

Vamos considerar disparo de emails / push notification para usuários através deste admin?

Talvez seria bacana ter uma área "advanced" para modificar as configurações (que hoje usamos dl-api config:set ...)

No mais concordo com o que o @gabriel-laet falou :)

Bem lembrado! Isso é uma boa feature. Inclusive, seria legal se esse disparo tivesse um modo de query, pra você segmentar quem você manda. Tipo, filtros mesmo.

Como o Dev vai declarar o app_id e a key ? Será por um .dl-config ? Vai ter uma key especifica para o admin, que consederá as permissões para listar collections e etc ?

Ou o getCollections(), validate() ... vai ser baseado no que foi registrado na inicialização do admin ?

Acho que deixamos isso livre para cada projeto. A key e o appid serão o mesmo, o que podemos fazer é obrigar que o usuário que se rola no admin, tenha um role de admin, e aí fica por conta da aplicação criar esses caras.

Mais pra frente, isso vai ter alguma relação com essa issue doubleleft/hook#7, mas agora não é um problema para o admin.

Mr. @fefranca já começou isso aqui: https://github.com/doubleleft/hellmanns-whatscook/tree/dl-api-admin

Assim que ele conseguir, vamos mover isso aqui pra esse repo e usar como starting point também. Já cobre bastante coisa massa.

Hey pessoal, vou organizar e disponibilizar aqui em breve ^^

Sintaxe

Vejam o que acham e dêem feedback.

    window.dl = new DL.Client( window.CONFIG_API );

    admin = new DLAdmin()

    admin.addModel(
            {
                name: "Conversas",
                collection: "hwcconversations", 
                fields: [{name:"name", type:"text"}, {name:"category", type:"text"}],
                relationships: [{type: "has_many", collection: "hwcmessages", sourceField:"id", targetField: "conversation_id"}]
            }
        )

    admin.addModel(
            {
                name: "Mensagens",
                collection: "hwcmessages",
                fields: [{name:"text", type:"text", multiLine: true}, {name:"image", type:"image"}],
                relationships: [
                    {type: "belongs_to", collection: "hwcconversations", sourceField:"conversation_id", targetField: "id"}
                ]
            }
        );

    admin.init()

Screenshots

screen shot 2014-06-04 at 10 54 16 am

screen shot 2014-06-04 at 10 55 49 am

Coisas bacanas

  • Login e tudo mais usando dl-api-javascript
  • Suporte a histórico do browser com pushState / popState
  • Tem um suporte mínimo a relationships

Coisas importantes que faltaram

  • Deleção (a princípio é simples mas queria muito tratar o caso dos relationships - "cascading")
  • Paginação

👏 👏 👏