{"action":"opened","issue":{"url":"https://api.github.com/repos/pcah/python-clean-architecture/issues/29","repository_url":"https://api.github.com/repos/pcah/python-clean-architecture","labels_url":"https://api.github.com/repos/pcah/python-clean-architecture/issues/29/labels{/name}","comments_url":"https://api.github.com/repos/pcah/python-clean-architecture/issues/29/comments","events_url":"https://api.github.com/repos/pcah/python-clean-architecture/issues/29/events","html_url":"https://github.com/pcah/python-clean-architecture/issues/29","id":386909785,"node_id":"MDU6SXNzdWUzODY5MDk3ODU=","number":29,"title":"Data: QuerySet","user":{"login":"lhaze","id":2180285,"node_id":"MDQ6VXNlcjIxODAyODU=","avatar_url":"https://avatars0.githubusercontent.com/u/2180285?v=4","gravatar_id":"","url":"https://api.github.com/users/lhaze","html_url":"https://github.com/lhaze","followers_url":"https://api.github.com/users/lhaze/followers","following_url":"https://api.github.com/users/lhaze/following{/other_user}","gists_url":"https://api.github.com/users/lhaze/gists{/gist_id}","starred_url":"https://api.github.com/users/lhaze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lhaze/subscriptions","organizations_url":"https://api.github.com/users/lhaze/orgs","repos_url":"https://api.github.com/users/lhaze/repos","events_url":"https://api.github.com/users/lhaze/events{/privacy}","received_events_url":"https://api.github.com/users/lhaze/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"lhaze","id":2180285,"node_id":"MDQ6VXNlcjIxODAyODU=","avatar_url":"https://avatars0.githubusercontent.com/u/2180285?v=4","gravatar_id":"","url":"https://api.github.com/users/lhaze","html_url":"https://github.com/lhaze","followers_url":"https://api.github.com/users/lhaze/followers","following_url":"https://api.github.com/users/lhaze/following{/other_user}","gists_url":"https://api.github.com/users/lhaze/gists{/gist_id}","starred_url":"https://api.github.com/users/lhaze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lhaze/subscriptions","organizations_url":"https://api.github.com/users/lhaze/orgs","repos_url":"https://api.github.com/users/lhaze/repos","events_url":"https://api.github.com/users/lhaze/events{/privacy}","received_events_url":"https://api.github.com/users/lhaze/received_events","type":"User","site_admin":false},"assignees":[{"login":"lhaze","id":2180285,"node_id":"MDQ6VXNlcjIxODAyODU=","avatar_url":"https://avatars0.githubusercontent.com/u/2180285?v=4","gravatar_id":"","url":"https://api.github.com/users/lhaze","html_url":"https://github.com/lhaze","followers_url":"https://api.github.com/users/lhaze/followers","following_url":"https://api.github.com/users/lhaze/following{/other_user}","gists_url":"https://api.github.com/users/lhaze/gists{/gist_id}","starred_url":"https://api.github.com/users/lhaze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lhaze/subscriptions","organizations_url":"https://api.github.com/users/lhaze/orgs","repos_url":"https://api.github.com/users/lhaze/repos","events_url":"https://api.github.com/users/lhaze/events{/privacy}","received_events_url":"https://api.github.com/users/lhaze/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/pcah/python-clean-architecture/milestones/3","html_url":"https://github.com/pcah/python-clean-architecture/milestone/3","labels_url":"https://api.github.com/repos/pcah/python-clean-architecture/milestones/3/labels","id":3823237,"node_id":"MDk6TWlsZXN0b25lMzgyMzIzNw==","number":3,"title":"0.1","description":"Alpha release.","creator":{"login":"lhaze","id":2180285,"node_id":"MDQ6VXNlcjIxODAyODU=","avatar_url":"https://avatars0.githubusercontent.com/u/2180285?v=4","gravatar_id":"","url":"https://api.github.com/users/lhaze","html_url":"https://github.com/lhaze","followers_url":"https://api.github.com/users/lhaze/followers","following_url":"https://api.github.com/users/lhaze/following{/other_user}","gists_url":"https://api.github.com/users/lhaze/gists{/gist_id}","starred_url":"https://api.github.com/users/lhaze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lhaze/subscriptions","organizations_url":"https://api.github.com/users/lhaze/orgs","repos_url":"https://api.github.com/users/lhaze/repos","events_url":"https://api.github.com/users/lhaze/events{/privacy}","received_events_url":"https://api.github.com/users/lhaze/received_events","type":"User","site_admin":false},"open_issues":15,"closed_issues":7,"state":"open","created_at":"2018-11-15T00:57:04Z","updated_at":"2018-12-03T16:53:54Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2018-12-03T16:53:54Z","updated_at":"2018-12-03T16:53:54Z","closed_at":null,"author_association":"COLLABORATOR","body":"It turned out that we need a query manipulation object, just like SQLAlchemy's `Query` & Django ORM's `QuerySet`. `Predicate` class is good at expressing an universal condition but there is more:\n\n- Not all operaterations' signatures of DAO make sense to have all cases of filtering (eg. exists). Using query chaining like `.filter(foo='bar').exists()` make more sense.\n- Sometimes you want to have final query built from a few predefined pieces (like having predefined user visibility queries and chaining them with a custom filter later)."}}
{"actor":{"display_login":"lhaze"}}