fn do_update(&self, nr: &MutateRecord) -> Result<Record> {
        use crate::schema::records::{self, dsl};

        // reset dulu yang ada flag latest-nya ke false
        diesel::update(
            dsl::records.filter(
                dsl::loc_path
                    .eq(nr.loc_path)
                    .and(dsl::loc_kind.eq(nr.loc_kind))
                    .and(dsl::latest.eq(true)),
            ),
        )
        .set(dsl::latest.eq(false))
        .execute(self.db)?;

        // tambahkan record baru dengan latest=true
        diesel::insert_into(records::table)
            .values(&MutateRecord {
                loc: nr.loc,
                loc_kind: nr.loc_kind,
                total_cases: nr.total_cases,
                total_deaths: nr.total_deaths,
                total_recovered: nr.total_recovered,
                active_cases: nr.active_cases,
                critical_cases: nr.critical_cases,
                meta: nr.meta.clone(),

                ppdwt: nr.ppdwt,
                pptb: nr.pptb,
                odp: nr.odp,
                pdp: nr.pdp,
                odpsp: nr.odpsp,
                pdps: nr.pdps,
                pdpm: nr.pdpm,
                otg: nr.otg,

                latest: true,
                loc_path: &nr.loc_path,
            })
            .get_result(self.db)
            .map_err(From::from)
    }
/// Ini sebenarnya tidak update, tapi akan menambahkan entry baru,
/// entry lama hanya akan di set latest=false, dan membuat entry baru
/// dengan flag latest=true,
/// hal ini karena sifatnya records adalah history.
Ini sebenarnya tidak update, tapi akan menambahkan entry baru,
entry lama hanya akan di set latest=false, dan membuat entry baru
dengan flag latest=true,
hal ini karena sifatnya records adalah history.
Ini sebenarnya tidak update tapi akan menambahkan entry baru entry lama hanya akan di set latest = false dan membuat entry baru dengan flag latest = true hal ini karena sifatnya records adalah history .
fn do_update(&self, nr: &MutateRecord) -> Result<Record> {
        use crate::schema::records::{self, dsl};
        // reset dulu yang ada flag latest-nya ke false
        diesel::update(
            dsl::records.filter(
                dsl::loc_path
                    .eq(nr.loc_path)
                    .and(dsl::loc_kind.eq(nr.loc_kind))
                    .and(dsl::latest.eq(true)),
            ),
        )
        .set(dsl::latest.eq(false))
        .execute(self.db)?;
        // tambahkan record baru dengan latest=true
        diesel::insert_into(records::table)
            .values(&MutateRecord {
                loc: nr.loc,
                loc_kind: nr.loc_kind,
                total_cases: nr.total_cases,
                total_deaths: nr.total_deaths,
                total_recovered: nr.total_recovered,
                active_cases: nr.active_cases,
                critical_cases: nr.critical_cases,
                meta: nr.meta.clone(),
                ppdwt: nr.ppdwt,
                pptb: nr.pptb,
                odp: nr.odp,
                pdp: nr.pdp,
                odpsp: nr.odpsp,
                pdps: nr.pdps,
                pdpm: nr.pdpm,
                otg: nr.otg,
                latest: true,
                loc_path: &nr.loc_path,
            })
            .get_result(self.db)
            .map_err(From::from)
    }
fn do_update ( & self , nr : & MutateRecord ) -> Result < Record > { use crate :: schema :: records :: { self , dsl } ; // reset dulu yang ada flag latest-nya ke false diesel :: update ( dsl :: records . filter ( dsl :: loc_path . eq ( nr . loc_path ) . and ( dsl :: loc_kind . eq ( nr . loc_kind ) ) . and ( dsl :: latest . eq ( true ) ) , ) , ) . set ( dsl :: latest . eq ( false ) ) . execute ( self . db ) ? ; // tambahkan record baru dengan latest=true diesel :: insert_into ( records :: table ) . values ( & MutateRecord { loc : nr . loc , loc_kind : nr . loc_kind , total_cases : nr . total_cases , total_deaths : nr . total_deaths , total_recovered : nr . total_recovered , active_cases : nr . active_cases , critical_cases : nr . critical_cases , meta : nr . meta . clone ( ) , ppdwt : nr . ppdwt , pptb : nr . pptb , odp : nr . odp , pdp : nr . pdp , odpsp : nr . odpsp , pdps : nr . pdps , pdpm : nr . pdpm , otg : nr . otg , latest : true , loc_path : & nr . loc_path , } ) . get_result ( self . db ) . map_err ( From :: from ) }
Ini sebenarnya tidak update, tapi akan menambahkan entry baru,
entry lama hanya akan di set latest=false, dan membuat entry baru
dengan flag latest=true,
hal ini karena sifatnya records adalah history.
Ini sebenarnya tidak update tapi akan menambahkan entry baru entry lama hanya akan di set latest = false dan membuat entry baru dengan flag latest = true hal ini karena sifatnya records adalah history .
&self
nr
&MutateRecord
&self
nr
&MutateRecord