In fact, DATE_ADD is not necessary and complicates the logic. Here is the simplest version for "Date of the first day of the current week":
select date(curdate() - interval weekday(curdate()) day)
which translates to: get the date () part (current date - interval in N days) where N = today is the number per week, i.e. Thu - number 3 (during the week starting on Monday).
Then, having received the Monday of the previous week, follow these steps:
select date(curdate() - interval weekday(curdate()) day - interval 1 week)
which is more readable IMHO.
source share