From 63b9b060c74a3afae4c6a081a62f797cc8de567f Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Wed, 21 Sep 2016 04:23:05 +0200
Subject: [PATCH] Enhance identity entity

---
 src/sakia/data/entities/identity.py           |  6 ++--
 src/sakia/data/repositories/identities.py     |  8 +++--
 src/sakia/data/repositories/meta.sql          |  6 ++--
 .../tests/unit/data/test_identies_repo.py     | 33 ++++++++++++-------
 4 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py
index 7cbbc1ec..c3cf174c 100644
--- a/src/sakia/data/entities/identity.py
+++ b/src/sakia/data/entities/identity.py
@@ -10,8 +10,10 @@ class Identity:
     blockstamp = attr.ib(convert=block_uid, default=BlockUID.empty())
     signature = attr.ib(convert=str, default="", cmp=False)
     timestamp = attr.ib(convert=int, default=0, cmp=False)
-    written = attr.ib(validator=attr.validators.instance_of(bool), default=False, cmp=False)
-    revoked = attr.ib(validator=attr.validators.instance_of(bool), default=False, cmp=False)
+    written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False)
+    revoked_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False)
     member = attr.ib(validator=attr.validators.instance_of(bool), default=False, cmp=False)
     membership_buid = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False)
     membership_timestamp = attr.ib(convert=int, default=0, cmp=False)
+    membership_type = attr.ib(convert=str, default='', validator=lambda s, a, t: t in ('', 'IN', 'OUT'), cmp=False)
+    membership_written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False)
diff --git a/src/sakia/data/repositories/identities.py b/src/sakia/data/repositories/identities.py
index d4ed89ba..3af88b1a 100644
--- a/src/sakia/data/repositories/identities.py
+++ b/src/sakia/data/repositories/identities.py
@@ -31,11 +31,13 @@ class IdentitiesRepo:
             self._conn.execute("""UPDATE identities SET
                                   signature=?,
                                   ts=?,
-                                  written=?,
-                                  revoked=?,
+                                  written_on=?,
+                                  revoked_on=?,
                                   member=?,
                                   ms_buid=?,
-                                  ms_timestamp=?
+                                  ms_timestamp=?,
+                                  ms_written_on=?,
+                                  ms_type=?
                                   WHERE
                                   currency=? AND
                                   pubkey=? AND
diff --git a/src/sakia/data/repositories/meta.sql b/src/sakia/data/repositories/meta.sql
index e82001c3..dc59befe 100644
--- a/src/sakia/data/repositories/meta.sql
+++ b/src/sakia/data/repositories/meta.sql
@@ -6,11 +6,13 @@ CREATE TABLE IF NOT EXISTS identities(
                                blockstamp VARCHAR(100),
                                signature VARCHAR(100),
                                ts INT,
-                               written BOOLEAN,
-                               revoked BOOLEAN,
+                               written_on VARCHAR(100),
+                               revoked_on VARCHAR(100),
                                member BOOLEAN,
                                ms_buid VARCHAR(100),
                                ms_timestamp INT,
+                               ms_written_on VARCHAR(100),
+                               ms_type VARCHAR(5),
                                PRIMARY KEY (currency, pubkey, uid, blockstamp)
                                );
 
diff --git a/src/sakia/tests/unit/data/test_identies_repo.py b/src/sakia/tests/unit/data/test_identies_repo.py
index a40f7ec1..a4abbd16 100644
--- a/src/sakia/tests/unit/data/test_identies_repo.py
+++ b/src/sakia/tests/unit/data/test_identies_repo.py
@@ -25,11 +25,13 @@ class TestIdentitiesRepo(unittest.TestCase):
                                         "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
                                         "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==",
                                         1473108382,
-                                        False,
-                                        False,
+                                        None,
+                                        None,
                                         False,
                                         None,
-                                        0))
+                                        0,
+                                        '',
+                                        None))
         identity = identities_repo.get_one(currency="testcurrency",
                                            pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
                                            uid="john",
@@ -46,6 +48,7 @@ class TestIdentitiesRepo(unittest.TestCase):
         self.assertEqual(identity.member, False)
         self.assertEqual(identity.membership_buid, BlockUID.empty())
         self.assertEqual(identity.membership_timestamp, 0)
+        self.assertEqual(identity.membership_written_on, BlockUID.empty())
         identities_repo.drop(identity)
         identity = identities_repo.get_one(currency="testcurrency",
                                            pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
@@ -65,21 +68,25 @@ class TestIdentitiesRepo(unittest.TestCase):
                                         "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
                                         "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==",
                                         1473108382,
-                                        False,
-                                        False,
+                                        None,
+                                        None,
                                         False,
                                         None,
-                                        0))
+                                        0,
+                                        '',
+                                        None))
         identities_repo.insert(Identity("testcurrency", "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn",
                                         "doe",
                                         "101-BAD49448A1AD73C978CEDCB8F137D20A5715EBAA739DAEF76B1E28EE67B2C00C",
                                         "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==",
                                         1455433535,
-                                        False,
-                                        False,
+                                        None,
+                                        None,
                                         False,
                                         None,
-                                        0))
+                                        0,
+                                        '',
+                                        None))
         identities = identities_repo.get_all(currency="testcurrency")
         self.assertIn("testcurrency", [i.currency for i in identities])
         self.assertIn("john", [i.uid for i in identities])
@@ -95,11 +102,13 @@ class TestIdentitiesRepo(unittest.TestCase):
                                         "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
                                         "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==",
                                         1473108382,
-                                        False,
-                                        False,
+                                        None,
+                                        None,
                                         False,
                                         None,
-                                        0)
+                                        0,
+                                        '',
+                                        None)
         identities_repo.insert(identity)
         identity.member = True
         identities_repo.update(identity)
-- 
GitLab