Coincidentally I just designed such a circuit last week, in order to control a mini fridge and turn it into a mini environmental chamber:

For the Mosfets I used FQP47P06 (Q2 and Q4), and FDP5800 (Q3 and Q5).
Mode of operation:
I provide logic level inputs on the header J2, from an arduino/raspberry_pi:
Either P1 and N1 are on, or P2 and N2 are on. These are the only two valid combinations. The fridge will either cool or heat based on the direction. PELTRED and PELTBLK are outputs to the peltier block.
Also note P1 and P2 (PNP) inputs are inverted, they are active low.
Also I should add, my cheap mini fridge has I think (not sure) a polyfuse and the original board had the circuit's ground separated by it. So I just added the F2 there to make the schematic work, but I will probably wire the original fridge's polyfuse wires to it.
The F1 fuse I have there is a real fuse. Part number: RXEF375.
I haven't really tested the circuit, but I can share the PCB design on OShpark once I test it.

Cost is about $10-15 in components and $18.70 for OShpark to make the 3 boards.
I also hacked a quick Arduino sketch which lets me control the fridge via USB-Serial from my computer or raspberry Pi:
/*
*/
int n1 = 8; // D8
int n2 = 9; // D9
int p1 = 10; // D10
int p2 = 11; // D11
byte byteRead;
byte status_byte;
void pins_mode() {
pinMode(n1, OUTPUT);
pinMode(n2, OUTPUT);
pinMode(p1, OUTPUT);
pinMode(p2, OUTPUT);
}
void mode_off() {
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(n1, LOW);
digitalWrite(n2, LOW);
digitalWrite(p1, HIGH);
digitalWrite(p2, HIGH);
status_byte = 'o';
}
void mode_cool() {
mode_off();
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(p1, HIGH);
digitalWrite(p2, LOW);
digitalWrite(n1, HIGH);
digitalWrite(n2, LOW);
status_byte = 'c';
}
void mode_warm() {
mode_off();
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(p1, LOW);
digitalWrite(p2, HIGH);
digitalWrite(n1, LOW);
digitalWrite(n2, HIGH);
status_byte = 'w';
}
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(9600);
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
mode_off();
}
void control(byte br){
switch(br){
case 'o':
mode_off();
break;
case 'c':
mode_cool();
break;
case 'w':
mode_warm();
break;
case 's':
Serial.write("status: ");
Serial.write(status_byte);
Serial.write("\r\n");
break;
}
}
void loop() {
if (Serial.available()) {
/* read the most recent byte */
byteRead = Serial.read();
control(byteRead);
}
}
Very simple protocol:
o - off
c - cool
w - warm
s - return status
The temperature sensor will be inside the fridge but read separately by a raspberry pi, which is part of my existing metrology rig.