Fix: Create new address_id and don't use default id.

This commit is contained in:
Keanu D?lle 2020-09-15 01:27:18 +02:00
parent 165718820c
commit 9cc37c3154
5 changed files with 48 additions and 29 deletions

View File

@ -5,9 +5,9 @@ create table addresses
constraint addresses_pk
primary key,
title text,
street text not null,
number text not null,
zipcode text not null,
city text not null,
country text not null
street text,
number text,
zipcode text,
city text,
country text
);

View File

@ -1,10 +1,11 @@
use crate::database::controller::connector::establish_connection;
use crate::database::model::addresses::Address;
use crate::helper::settings::Settings;
use crate::schema::addresses::columns::id;
use crate::schema::addresses::dsl::addresses;
use crate::schema::addresses_entities::columns::{address_id, entitiy_id};
use crate::schema::addresses_entities::dsl::addresses_entities;
use diesel::{insert_into, ExpressionMethods, RunQueryDsl};
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl};
use rocket::State;
pub fn insert_address(
@ -14,8 +15,8 @@ pub fn insert_address(
) -> bool {
let connection = establish_connection(settings);
let address = insert_into(addresses)
.values(new_address)
let address = diesel::insert_into(addresses)
.default_values()
.get_result(&connection);
let address: Address = match address {
@ -26,7 +27,23 @@ pub fn insert_address(
}
};
let result = insert_into(addresses_entities)
let mut new_address = new_address;
new_address.id = address.id;
let update = diesel::update(addresses)
.filter(id.eq(address.id))
.set(&new_address)
.get_result(&connection);
let address: Address = match update {
Ok(address) => address,
Err(e) => {
warn!("Couldn't receive updated address: {}", e);
return false;
}
};
let result = diesel::insert_into(addresses_entities)
.values((address_id.eq(address.id), entitiy_id.eq(belongs_to.clone())))
.execute(&connection);

View File

@ -106,8 +106,8 @@ fn parse_profile_member_form_address(
member_form: MemberProfileForm,
old_address: Option<Address>,
) -> Option<Address> {
if old_address.is_some() {
let address_id = match Uuid::from_str(&member_form.address_id) {
let address_id: uuid::Uuid = if old_address.is_some() {
match Uuid::from_str(&member_form.address_id) {
Ok(uuid) => {
if uuid != old_address.clone().unwrap().id {
warn!(
@ -127,8 +127,10 @@ fn parse_profile_member_form_address(
);
return None;
}
};
}
}
} else {
Default::default()
};
let title = if old_address.is_some() {
old_address.unwrap().title
@ -137,13 +139,13 @@ fn parse_profile_member_form_address(
};
Some(Address {
id: Default::default(),
id: address_id,
title,
street: member_form.address_street,
number: member_form.address_number,
zipcode: member_form.address_zipcode,
city: member_form.address_city,
country: member_form.address_country,
street: Some(member_form.address_street),
number: Some(member_form.address_number),
zipcode: Some(member_form.address_zipcode),
city: Some(member_form.address_city),
country: Some(member_form.address_country),
})
}

View File

@ -7,9 +7,9 @@ use crate::schema::addresses;
pub struct Address {
pub(crate) id: uuid::Uuid,
pub(crate) title: Option<String>,
pub(crate) street: String,
pub(crate) number: String,
pub(crate) zipcode: String,
pub(crate) city: String,
pub(crate) country: String,
pub(crate) street: Option<String>,
pub(crate) number: Option<String>,
pub(crate) zipcode: Option<String>,
pub(crate) city: Option<String>,
pub(crate) country: Option<String>,
}

View File

@ -5,11 +5,11 @@ table! {
addresses (id) {
id -> Uuid,
title -> Nullable<Text>,
street -> Text,
number -> Text,
zipcode -> Text,
city -> Text,
country -> Text,
street -> Nullable<Text>,
number -> Nullable<Text>,
zipcode -> Nullable<Text>,
city -> Nullable<Text>,
country -> Nullable<Text>,
}
}