如何使用 Angular 2 服务向另一个资源提供包含 links/ids 的资源集合?

How to provide a collection of resources that contains links/ids to another resource with an Angular 2 service?

我有一个用户集合。每个用户都有一个cards数组,由用户选择的id张卡片组成。

user.cards = [10, 12, 24, 31]

我想拥有用户选择最多的 10 张卡片。

我有 user.service.jscard.service.js,我猜它们是 DAO。 card.service.js 看起来像这样(为简单起见,使用普通 Promises)。

(function(app) {
    app.CardService = ng.core.Injectable({}).Class({
        constructor: function() {},
        getCards: function() {
            return Promise.resolve(app.cards)
        },
        getCard: function(cardId) {
            return Promise.resolve(app.cards.get(cardId));
        },
        getTop10Cards: function() {
            // How would I go about doing this method?
        }
    })
})(window.app || (window.app = {}));

从逻辑上讲,我需要所有用户的列表,收集他们的 cardIds 并聚合他们以找到最常用的卡片。但是 CardService 应该使用 UserService (作为注射剂)吗?或者在另一个 DAO 中使用一个 DAO 是错误的方法吗?我是否应该有一个单独的集合,其中包含每个模型之间的链接(如联合 table)?

为了帮助自己处理这个客户端问题,我调查了后端资源的样子。我想出了类似于“How to handle many-to-many relationships in a RESTful API?”的东西。

这些是我的 API 端点可能的样子:/users/cards/cards/{cardId}/votes/cards/{cardId}/votes 包含定义用户与他们选择的卡片之间关系的资源。

在代码中,我确实在card.service.js里面注入了vote.service.js。当我 GET 卡片时,我也将它们与 votes 的子集组合在一起。有关详细信息,请参阅“angular js model relationships”。

我希望这会对遇到这个问题的任何人有所帮助。

干杯!