diff --git a/swh/graphql/resolvers/origin.py b/swh/graphql/resolvers/origin.py index 8bef18a..80b182f 100644 --- a/swh/graphql/resolvers/origin.py +++ b/swh/graphql/resolvers/origin.py @@ -1,76 +1,86 @@ from ariadne import ObjectType from . import query from swh.graphql.backends import archive origin = ObjectType("Origin") origins = ObjectType("OriginConnection") visit = ObjectType("Visit") @query.field("origin") def resolve_origin(_, info, **kw): """ Top level query Get the origin matching the URL """ # return BaseNode.factory('origin').get(filters) return archive.Archive().get_origin(kw["url"]) # @origin.field("url") # def origin_url(origin, info): # return origin.url @origin.field("id") def origin_id(origin, info): return origin.id.hex() @query.field("origins") def resolve_origins(_, info, **kw): """ Top level query Get all the origins matching the criteria """ # return BaseList.factory('origin').get(filters, state) origins = archive.Archive().get_origins( after=kw.get("after"), first=kw.get("first") ) # return results return { "nodes": origins.results, "pageInfo": { "hasNextPage": bool(origins.next_page_token), "endCursor": origins.next_page_token, }, } @origin.field("visits") def resolve_origin_visits(origin, info, **kw): visits = archive.Archive().get_origin_visits( origin.url, after=kw.get("after"), first=kw.get("first") ) return { "nodes": visits.results, + "origin": origin, "pageInfo": { "hasNextPage": bool(visits.next_page_token), "endCursor": visits.next_page_token, }, } +def resolve_visit(_, info, **kw): + pass + + @visit.field("status") def visit_status(visit, info): return str(visit.visit) @visit.field("date") def visit_date(visit, info): return visit.date.timestamp() + + +@visit.field("id") +def visit_id(visit, info): + return str(visit.visit) diff --git a/swh/graphql/schema/schema.graphql b/swh/graphql/schema/schema.graphql index 17a63d0..cbb0ce2 100644 --- a/swh/graphql/schema/schema.graphql +++ b/swh/graphql/schema/schema.graphql @@ -1,68 +1,99 @@ interface Node { id: ID! } scalar Date type PageInfo { endCursor: String hasNextPage: Boolean! } type Origin implements Node { url: String! id: ID! visits( first: Int after: String ): VisitConnection! } type OriginEdge { cursor: String! node: [Origin] } type OriginConnection { edges: [OriginEdge] nodes: [Origin] pageInfo: PageInfo! totalCount: Int } type Visit implements Node { id: ID! - date: Date - status: String - origin: Origin! + date: Date! + status: VisitStatusConnection + origin: Origin } type VisitEdge { cursor: String! node: [Visit] } type VisitConnection { edges: [VisitEdge] nodes: [Visit] pageInfo: PageInfo! totalCount: Int } +type VisitStatus implements Node { + id: ID! + status: String! + date: Date! + snapshot: String + type: String +} + +type VisitStatusEdge { + cursor: String! + node: [VisitStatus] +} + +type VisitStatusConnection { + edges: [VisitStatusEdge] + nodes: [VisitStatus] + pageInfo: PageInfo! + totalCount: Int +} + +type Snapshot implements Node { + id: ID! + # branches +} + + type Query { """ Get an origin with its url """ origin( url: String! ): Origin """ Get a list of origins matching the given filters """ origins( first: Int after: String ): OriginConnection! + + visit( + originUrl: String! + id: String! + ): Visit }