use serde::{Deserialize, Serialize};
use super::types::{GroupMember, TimeStamp, UserGroup, Uuid};
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupCreatedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group: UserGroup,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupUpdatedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group_id: Uuid,
}
impl From<UserGroupDeletedPayload> for UserGroupUpdatedPayload {
fn from(payload: UserGroupDeletedPayload) -> Self {
Self {
event_time: payload.event_time,
group_id: payload.group_id,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupDeletedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group_id: Uuid,
}
impl From<UserGroupUpdatedPayload> for UserGroupDeletedPayload {
fn from(payload: UserGroupUpdatedPayload) -> Self {
Self {
event_time: payload.event_time,
group_id: payload.group_id,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupMemberAddedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group_member: GroupMember,
}
impl From<UserGroupMemberUpdatedPayload> for UserGroupMemberAddedPayload {
fn from(payload: UserGroupMemberUpdatedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
impl From<UserGroupMemberRemovedPayload> for UserGroupMemberAddedPayload {
fn from(payload: UserGroupMemberRemovedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
impl From<UserGroupAdminAddedPayload> for UserGroupMemberAddedPayload {
fn from(payload: UserGroupAdminAddedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupMemberUpdatedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group_member: GroupMember,
}
impl From<UserGroupMemberAddedPayload> for UserGroupMemberUpdatedPayload {
fn from(payload: UserGroupMemberAddedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
impl From<UserGroupMemberRemovedPayload> for UserGroupMemberUpdatedPayload {
fn from(payload: UserGroupMemberRemovedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupMemberRemovedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group_member: GroupMember,
}
impl From<UserGroupMemberAddedPayload> for UserGroupMemberRemovedPayload {
fn from(payload: UserGroupMemberAddedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
impl From<UserGroupMemberUpdatedPayload> for UserGroupMemberRemovedPayload {
fn from(payload: UserGroupMemberUpdatedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
impl From<UserGroupAdminRemovedPayload> for UserGroupMemberRemovedPayload {
fn from(payload: UserGroupAdminRemovedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupAdminAddedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group_member: GroupMember,
}
impl From<UserGroupAdminRemovedPayload> for UserGroupAdminAddedPayload {
fn from(payload: UserGroupAdminRemovedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
impl From<UserGroupMemberAddedPayload> for UserGroupAdminAddedPayload {
fn from(payload: UserGroupMemberAddedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserGroupAdminRemovedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub group_member: GroupMember,
}
impl From<UserGroupAdminAddedPayload> for UserGroupAdminRemovedPayload {
fn from(payload: UserGroupAdminAddedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
impl From<UserGroupMemberRemovedPayload> for UserGroupAdminRemovedPayload {
fn from(payload: UserGroupMemberRemovedPayload) -> Self {
Self {
event_time: payload.event_time,
group_member: payload.group_member,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::payloads::types::{UserGroupAdmin, UserGroupMember};
use crate::test_utils::{timestamp, uuid};
use std::{fs::read_to_string, vec};
#[test]
fn user_group_created_test() {
let data = read_to_string("testdata/user-group/user_group_created.json").unwrap();
let payload: UserGroupCreatedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupCreatedPayload {
event_time: timestamp("2023-08-25T04:04:32.912312Z"),
group: UserGroup {
id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
name: "fugafuga".to_string(),
description: "FUGA_FUGA".to_string(),
r#type: "ふがふが".to_string(),
icon: uuid("81f6da0d-eaab-4c42-84ac-74f5111e1eaa"),
admins: vec![UserGroupAdmin {
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
user_id: uuid("8e6a088f-9274-42c0-bb20-cee7913d144b"),
}],
members: vec![UserGroupMember {
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
user_id: uuid("8e6a088f-9274-42c0-bb20-cee7913d144b"),
role: String::new(),
}],
created_at: timestamp("2023-08-25T04:04:32.912312Z"),
updated_at: timestamp("2023-08-25T04:04:32.912312Z")
}
}
);
}
#[test]
fn user_group_updated_test() {
let data = read_to_string("testdata/user-group/user_group_updated.json").unwrap();
let payload: UserGroupUpdatedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupUpdatedPayload {
event_time: timestamp("2023-08-25T04:04:32.962264Z"),
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
}
);
}
#[test]
fn user_group_deleted_test() {
let data = read_to_string("testdata/user-group/user_group_deleted.json").unwrap();
let payload: UserGroupDeletedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupDeletedPayload {
event_time: timestamp("2023-08-25T06:40:35.971142Z"),
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
}
);
}
#[test]
fn user_group_member_added_test() {
let data = read_to_string("testdata/user-group/user_group_member_added.json").unwrap();
let payload: UserGroupMemberAddedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupMemberAddedPayload {
event_time: timestamp("2023-08-25T04:04:32.962264Z"),
group_member: GroupMember {
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
user_id: uuid("8e6a088f-9274-42c0-bb20-cee7913d144b"),
},
}
);
}
#[test]
fn user_group_member_updated_test() {
let data = read_to_string("testdata/user-group/user_group_member_updated.json").unwrap();
let payload: UserGroupMemberUpdatedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupMemberUpdatedPayload {
event_time: timestamp("2023-08-25T04:04:32.962264Z"),
group_member: GroupMember {
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
user_id: uuid("8e6a088f-9274-42c0-bb20-cee7913d144b"),
},
}
);
}
#[test]
fn user_group_member_removed_test() {
let data = read_to_string("testdata/user-group/user_group_member_removed.json").unwrap();
let payload: UserGroupMemberRemovedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupMemberRemovedPayload {
event_time: timestamp("2023-08-25T04:04:32.962264Z"),
group_member: GroupMember {
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
user_id: uuid("8e6a088f-9274-42c0-bb20-cee7913d144b"),
},
}
);
}
#[test]
fn user_group_admin_added_test() {
let data = read_to_string("testdata/user-group/user_group_admin_added.json").unwrap();
let payload: UserGroupAdminAddedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupAdminAddedPayload {
event_time: timestamp("2023-08-25T04:04:32.962264Z"),
group_member: GroupMember {
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
user_id: uuid("8e6a088f-9274-42c0-bb20-cee7913d144b"),
},
}
);
}
#[test]
fn user_group_admin_removed_test() {
let data = read_to_string("testdata/user-group/user_group_admin_removed.json").unwrap();
let payload: UserGroupAdminRemovedPayload = data.parse().unwrap();
assert_eq!(
payload,
UserGroupAdminRemovedPayload {
event_time: timestamp("2023-08-25T04:04:32.962264Z"),
group_member: GroupMember {
group_id: uuid("f265bde2-04cc-4856-9008-3db1d953a539"),
user_id: uuid("8e6a088f-9274-42c0-bb20-cee7913d144b"),
},
}
);
}
}