SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 107092fe authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Add read_by and update API for StoredMessage

parent 13aec3e4
No related branches found
No related tags found
No related merge requests found
...@@ -109,6 +109,7 @@ class StoredMessageRetrieveAPIView(RetrieveAPIView): ...@@ -109,6 +109,7 @@ class StoredMessageRetrieveAPIView(RetrieveAPIView):
class StoredMessageUpdateReadAPIView(UpdateAPIView): class StoredMessageUpdateReadAPIView(UpdateAPIView):
"""Updates the read field (M2M to user) in StoredMessage.""" """Updates the read field (M2M to user) in StoredMessage."""
queryset = StoredMessage.objects.all()
permission_classes = (IsAdminUser,) permission_classes = (IsAdminUser,)
serializer_class = StoredMessageSerializer serializer_class = StoredMessageSerializer
lookup_field = 'uuid' lookup_field = 'uuid'
...@@ -117,5 +118,5 @@ class StoredMessageUpdateReadAPIView(UpdateAPIView): ...@@ -117,5 +118,5 @@ class StoredMessageUpdateReadAPIView(UpdateAPIView):
def partial_update(self, request, *args, **kwargs): def partial_update(self, request, *args, **kwargs):
instance = self.get_object() instance = self.get_object()
instance.read_by.add(request.user) instance.read_by.add(request.user)
instance.save(update_fields=['read_by']) instance.save()
return Response() return Response()
# Generated by Django 2.1.8 on 2020-01-16 18:55
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('apimail', '0006_storedmessage_read_by'),
]
operations = [
migrations.AlterField(
model_name='storedmessage',
name='read_by',
field=models.ManyToManyField(blank=True, related_name='_storedmessage_read_by_+', to=settings.AUTH_USER_MODEL),
),
]
...@@ -26,7 +26,10 @@ class StoredMessage(models.Model): ...@@ -26,7 +26,10 @@ class StoredMessage(models.Model):
editable=False) editable=False)
data = JSONField(default=dict) data = JSONField(default=dict)
datetimestamp = models.DateTimeField(default=timezone.now) datetimestamp = models.DateTimeField(default=timezone.now)
read_by = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='+') read_by = models.ManyToManyField(
settings.AUTH_USER_MODEL,
blank=True,
related_name='+')
objects = StoredMessageQuerySet.as_manager() objects = StoredMessageQuerySet.as_manager()
......
...@@ -51,36 +51,47 @@ ...@@ -51,36 +51,47 @@
</template> </template>
<script> <script>
export default { import Cookies from 'js-cookie'
name: "message-content",
props: { var csrftoken = Cookies.get('csrftoken');
message: {
type: Object, export default {
required: true name: "message-content",
}, props: {
}, message: {
computed: { type: Object,
sanitized_html() { required: true
if (this.message.data["body-html"]) { },
return this.$sanitize(this.message.data["body-html"]) },
} computed: {
return this.$sanitize(this.message.data["body-plain"]) sanitized_html() {
} if (this.message.data["body-html"]) {
}, return this.$sanitize(this.message.data["body-html"])
filters: { }
toDatestring(unixtimestamp) { return this.$sanitize(this.message.data["body-plain"])
return new Date(1000 * unixtimestamp).toISOString() }
} },
}, filters: {
mounted () { toDatestring(unixtimestamp) {
if (!this.message.read) { return new Date(1000 * unixtimestamp).toISOString()
console.log('uuid: ' + this.message.uuid) }
fetch('/mail/api/stored_message/' + this.message.uuid + '/mark_as_read', },
{ method: 'PATCH', } mounted () {
).then((res) => res.json()) if (!this.message.read) {
.then((data) => console.log(data)) console.log('uuid: ' + this.message.uuid)
.catch((err)=>console.log(err)) fetch('/mail/api/stored_message/' + this.message.uuid + '/mark_as_read',
} { method: 'PATCH',
} headers: {
} "X-CSRFToken": csrftoken,
}
}
).then(function(response) {
if (!response.ok) {
throw new Error('HTTP error, status = ' + response.status);
}
});
this.message.read = true
}
}
}
</script> </script>
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
"bootstrap-vue": "^2.1.0", "bootstrap-vue": "^2.1.0",
"expose-loader": "^0.7.5", "expose-loader": "^0.7.5",
"fibers": "^4.0.2", "fibers": "^4.0.2",
"js-cookie": "^2.2.1",
"mem": "^6.0.0", "mem": "^6.0.0",
"mini-css-extract-plugin": "^0.8.0", "mini-css-extract-plugin": "^0.8.0",
"nan": "^2.14.0", "nan": "^2.14.0",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment